C ++中数组和向量之间有什么区别?差异的一个例子可能包括图书馆,象征,能力等。
数组包含特定类型的特定数量的元素。因此编译器可以在编译程序时保留所需的空间量,您必须指定数组在定义时将包含的元素的类型和数量。编译程序时,编译器必须能够确定此值。一旦定义了数组,就可以使用数组的标识符和索引来访问数组的特定元素。 [...]数组是零索引的;也就是说,第一个元素是索引0.这个索引方案表示指针和数组之间C ++中的密切关系以及语言为指针算法定义的规则。
- C ++ Pocket Reference
向量是动态大小的对象序列,提供数组样式的
operator[]
随机访问。成员函数push_back
通过复制构造函数复制其参数,将该副本添加为向量中的最后一项,并将其大小增加1。通过删除最后一个元素,pop_back
完全相反。从向量的末尾插入或删除项目需要分摊常数,并且从任何其他位置插入或删除需要线性时间。这些是载体的基础。他们还有很多东西。在大多数情况下,矢量应该是C风格数组的首选。首先,它们是动态大小的,这意味着它们可以根据需要增长。您不必进行各种研究以找出最佳静态大小,如C阵列的情况;矢量会根据需要增长,如果需要,可以手动调整大小。其次,向量提供使用at
成员函数进行边界检查(但不能使用operator[]
),这样如果引用不存在的索引而不是简单地观察程序崩溃或更糟,继续执行,就可以执行某些操作有腐败的数据。- C ++ Cookbook
答案 0 :(得分:124)
数组:
malloc
分配); sizeof
(因此是常见的成语sizeof(arr)/sizeof(*arr)
,但是当无意中在指针上使用时会无声地失败;) std::vector
:
&vec[0]
保证按预期工作); begin()
/ end()
方法,通常的STL typedef
,...)还要考虑数组的“现代替代方案” - std::array
;我已经在another answer中描述了std::vector
和std::array
之间的区别,您可能需要查看它。
答案 1 :(得分:23)
我将补充说,数组是C ++中非常低级的结构,你应该尽量远离它们“学习绳索” - 甚至Bjarne Stroustrup推荐这个(他是C ++的设计者) 。
矢量与阵列的性能非常接近,但具有许多便利性和安全性。在与处理原始数组的API接口时,或者在构建自己的集合时,您可能会开始使用数组。
答案 2 :(得分:9)
这些参考几乎回答了你的问题。简单地说,向量的长度是动态的,而数组具有固定的大小。 使用数组时,请在声明时指定其大小:
int myArray[100];
myArray[0]=1;
myArray[1]=2;
myArray[2]=3;
对于向量,您只需声明它并添加元素
vector<int> myVector;
myVector.push_back(1);
myVector.push_back(2);
myVector.push_back(3);
...
有时你不知道所需元素的数量,因此矢量对于这种情况是理想的。