什么是一个数组,在C ++中的矢量之间的差异? 的差异的例子可能包括图书馆,象征主义,能力,等等。
排列
阵列包含特定类型的元件的特定号码。 因此,该程序编译时,编译器可以保留所需要的空间量,你必须指定它定义为当数组将包含元素的类型和数量。 编译器必须能够确定这个值的程序编译时。 一旦一个数组已被定义,可以使用该标识符用于阵列与索引一起访问所述阵列的特定元素。 [...]阵列零索引; 也就是说,第一元件是在索引0。此索引方案是指示在C ++指针和数组和该语言定义了指针运算规则之间的密切关系。
- C ++袖珍参考
向量
一种载体是对象的动态大小的序列,其提供阵列式operator[]
随机访问。 成员函数push_back
副本通过拷贝构造函数它的参数,增加了该副本作为最后一个项目的载体和一个增加它的大小。 pop_back
确实完全相反的,通过去除最后一个元素。 插入或从一个矢量的末端删除项目需要分期常量时间,以及插入或从任何其他位置删除需要线性时间。 这些载体的基础。 还有很多更给他们。 在大多数情况下,载体应该是在C数组的第一选择。 首先,它们是动态调整大小,这意味着它们可以根据需要增加。 你不必做各种研究,以找出最佳的静态大小,如C数组的情况; 一个向量的增长需要,它可以被调整大小更大或更小,如果手动你需要。 其次,载体提供边界与检查at
成员函数(但不与operator[]
因此,如果您引用不存在的指标,而不是简单地看你的程序崩溃或更糟的是,继续执行与被破坏的数据,你可以做一些事情。
- C ++食谱
数组:
- 是一个内置的语言构造;
- 从C89来几乎未经修改的;
- 只是提供一个连续的,元件的可转位序列 ; 没有花里胡哨;
- 是固定大小的; 你不能调整在C ++的阵列(除非它是POD的阵列,并且它与分配
malloc
); - 它们的大小必须是一个编译时间常数,除非它们是动态分配的;
- 他们从那里你声明它们的范围取决于他们的存储空间;
- 如果动态分配的,你必须明确地取消分配他们。
- 如果他们是动态分配的,你只是得到一个指针,而不能确定它们的大小; 否则,可以使用
sizeof
(因此共同成语sizeof(arr)/sizeof(*arr)
上一指针无意中使用时然而静静地失败); - 自动衰减到在大多数情况下一个指针; 特别地,这种情况将它们传递给一个函数,这通常需要通过为它们的大小的单独参数时;
- 不能从函数返回;
- 不能被复制/直接分配;
- 对象的动态阵列需要一个默认的构造中,由于他们的所有元件必须首先构建;
std::vector
:
- 是一个模板类;
- 是一个C ++只是构造;
- 被实现为动态阵列 ;
- 生长和收缩动态;
- 自动管理他们的存储器,这是在破坏释放;
- 可以传递到/从功能(由值)返回;
- 可复制/分配(此执行所有的存储元件的深层副本);
- 不衰减的指针,但你可以明确地得到一个指向其数据(
&vec[0]
保证按预期工作); - 总是与内部动态数组其大小 (有多少个元素目前被存储)和容量 (多少元素可被存储在当前分配的块)沿带来;
- 内部动态阵列不是对象本身内部分配(这只是包含几个“簿记”字段),而是由在相关的模板参数指定的分配器动态分配; 默认一个从如何在实际对象被分配得到从的FreeStore存储器(所谓的堆),独立地;
- 因为这个原因,他们可能比小,短期,局部阵列“正规军”的阵列效率较低;
- 重新分配的情况下,对象被复制 (移动时,在C ++ 11);
- 不需要存储的对象的默认构造函数;
- 与所谓的STL的其余部分更好地整合(它提供的
begin()
/ end()
方法,通常的STL typedef
S,...)
也可以考虑“现代另类”到数组- std::array
; 我中已经描述另一个答案之间的区别std::vector
和std::array
,你可能想看看它。
我要补充的是数组是非常低级别的结构在C ++中,你应该尽量远离他们尽可能在“学习的绳索” - 甚至Bjarne的Stroustrup的推荐这个(他是C的设计师++)。
向量非常接近相同的性能数组,但有许多的便利和安全功能。 你可能会开始使用API,可处理原始阵列,或建立自己的收藏时,交互时使用数组。
这些参考几乎回答了你的问题。 简单地说,向量的长度是动态的,而阵列具有固定的大小。 使用阵列时,您可以指定在声明它的大小:
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);
...
有时,你不会知道需要这样的载体将是理想的这种情况元素的数量。