如果我要用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++中是否有任何形式可以形成动态数组.也许通过使用包含新功能的特殊库?
谢谢!
使用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可能在某些访问/修改模式下执行得更好,因为它进行多次分配,因此不需要在容器用完容量时复制现有内容.