如果我要用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 ++中是否存在任何方式 可以形成动态数组。也许通过使用包含新功能的特殊库?
谢谢!
答案 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;
}
如果您不需要容器分配是连续的,std::deque
可能在某些访问/修改模式下表现更好,因为它进行多次分配,因此不需要在容器运行时复制现有内容超出能力。