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

时间:2017-09-05 01:06:48

标签: 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;
}

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

所以我不会访问数组之外​​的内存空间,这是一个很好的做法来声明数组的整数大小,因此通常会将其声明为int numbers[10] = {1,2,3,4,5,6,7,8,9,10}; ...但是#39; s不是必需的,因为可以使用基于for循环的范围访问整数数组。

然而,这涉及声明一个数组,通常是大小,或者如果你不给它大小(元素的数量),那么你必须立即指定数组中的元素,然后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. 

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

1 2 3 4 5 6 7 8 9 10

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

在Perl数组中使用&#34; @&#34;符号和奇异变量用&#34; $&#34;来表示。符号。除了我知道如何用它形成动态数组这个事实之外,我没有使用Perl。

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

谢谢!

1 个答案:

答案 0 :(得分:7)

使用专为此用例设计的std::vector

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

#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;
}

Live demo

如果您不需要容器分配是连续的,std::deque可能在某些访问/修改模式下表现更好,因为它进行多次分配,因此不需要在容器运行时复制现有内容超出能力。