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