如何在C++中形成动态数组?

xyz*_*123 -7 c++

如果我要用C++形成一个整数数组,我知道我可以这样做:

#include <iostream>
using namespace std;

int main()
{
int numbers[] = {1,2,3,4,5,6,7,8,9,10};
for(int i = 0; i < 10; i++){cout << i << " ";}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

执行上面的C++代码只打印整数1到10,每个整数分隔一个空格.

所以我不访问数组之外​​的内存空间,最好声明数组的整数大小,所以它通常被声明为int numbers[10] = {1,2,3,4,5,6,7,8,9,10};......但这不是必需的,因为可以使用范围访问整数数组基于循环.

但是,这涉及声明一个数组,通常是大小,或者如果你没有给它大小(元素的数量),那么你必须立即指定数组中的元素,然后C++确定大小.这是一个静态数组.

我感兴趣的是动态数组,您不必在其中声明数组的大小或立即用元素填充它,但您可以稍后将项添加到数组中.考虑一个整数数组,我喜欢在Perl中做这个技巧:

use strict;
use warnings;

my @numbers = (); # Declare an array without declaring its size or elements. 

for(my $i = 1; $i <= 10; $i++)
{
    push @numbers, $i; # Dynamically form the @numbers array with values 1 to 10. 
}

while(my $values= <@numbers>){print "$values";} # Print every value in the array of numbers. 
Run Code Online (Sandbox Code Playgroud)

执行以下Perl代码会产生以下输出:

1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)

这是从元素0到9的@numbers数组的内容.您可以看到它是动态形成的.

在Perl中,数组用"@"符号声明,奇异变量用"$"符号表示.除了我知道如何用它形成动态数组之外,我没有使用Perl.

我想知道在C++中是否有任何形式可以形成动态数组.也许通过使用包含新功能的特殊库?

谢谢!

cdh*_*wie 7

使用std::vector,专为此用例而设计.

你给C++使用的Perl代码的(粗略)翻译std::vector将是这样的:

#include <iostream>
#include <vector>

int main() {
    // Declare a vector that can only contain int values.
    std::vector<int> numbers;

    // Put the numbers [1,10] into the array.
    for (int i = 1; i <= 10; ++i) {
        numbers.push_back(i);
    }

    // Display the contents of the vector.
    for (auto const &values : numbers) { std::cout << values << '\n'; }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(现场演示)

如果您不需要容器分配是连续的,则std::deque可能在某些访问/修改模式下执行得更好,因为它进行多次分配,因此不需要在容器用完容量时复制现有内容.