数组或向量?

时间:2013-01-23 12:12:48

标签: c++ arrays vector

  

可能重复:
  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?

我总是使用向量(动态数组)来处理所有事情,我从不使用普通数组,这有什么不利之处,例如,是否会有一个向量不适合的时间,并且正常数组将适合功能

4 个答案:

答案 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];
}