可能重复:
When would you use an array rather than a vector/string?
What is the difference between std::array and std::vector? When do you use one over other?
我总是使用向量(动态数组)来处理所有事情,我从不使用普通数组,这有什么不利之处,例如,是否会有一个向量不适合的时间,并且正常数组将适合功能
答案 0 :(得分:4)
根据Bjarne Stroustrup,你应该使用vector over Array,除非你有充分的理由使用数组。
答案 1 :(得分:4)
在几乎所有情况下,vector
都是首选。它的内存是从免费商店(专为大型分配而设计)分配并自动管理的;如果需要,你可以很容易地得到一个指向数组的指针。
如果符合以下条件,您将使用数组(内置或std::array
)
答案 2 :(得分:2)
Vector是一个动态增长的数组。阵列是静态的。您必须在开头定义一个数组,并且无法重新分配。 使用向量,您没有声明固定大小的限制。您可以从空向量开始,并根据需要保持增长。 到目前为止,我从未发现任何阵列更适合的情况。事实上,我发现使用向量解决了我面对阵列的许多问题。 我认为总是使用矢量是一种非常好的做法。
继续这样做!!!!
答案 3 :(得分:0)
使用最适合您情况的东西,我已经通过一个小例子概述了我最喜欢的固定尺寸阵列的一个好处。
如果您的大小未知或者可能需要在运行时增加存储空间,那么您将寻找一个向量。
如果你有一个预定的大小,你可以使用std :: array甚至是一个原始的C数组(int foo [256]),这有利于代码的简单性和速度。这里最好的好处之一是,如果要存储在数组中的数据是已知的,那么您可以使用C样式初始化列表来消除向量中可能发生的任何设置成本,并为优化程序打开空间以使事情更快同时也更容易调试:
struct KeyPair { int key; string name; };
const KeyPair kFoo[] = { { 0, "0" }, { 1, "1" }, { 2, "2" } };
const string& getName( unsigned int key )
{
assert( key < (sizeof(kFoo)/sizeof(*kFoo)) ); // Check key is a valid index
assert( kFoo[key].key == key ); //< Sanity check - useful is key is an enum which could change
return kFoo[key];
}