Alo*_*ave 115 c++ arrays vector
std::array和之间有什么区别std::vector?你什么时候使用其他?
我一直使用并认为std:vector是使用C数组的C++方式,那有什么区别?
Nem*_*emo 155
std::array只是经典C数组的类版本.这意味着它的大小在编译时是固定的,并且它将被分配为单个块(例如,在堆栈上占用空间).它具有的优点是性能略好,因为对象和阵列数据之间没有间接.
std::vector是一个包含指向堆的指针的小类.(所以当你分配a时std::vector,它总是调用new.)它们访问速度稍慢,因为必须追逐这些指针以获取阵列数据......但作为交换,它们可以调整大小,它们只需要一个小事堆栈空间的数量,无论它们有多大.
[编辑]
至于什么时候使用一个,老实说std::vector几乎总是你想要的.通常不赞成在堆栈上创建大对象,并且额外的间接级别通常是无关紧要的.(例如,如果您完成所有元素的迭代,额外的内存访问仅在循环的开始发生一次.)
向量的元素保证是连续的,因此您可以传递&vec[0]给期望指向数组的指针的任何函数; 例如,C库例程.(std::vector<char> buf(8192);顺便说一句,这是一种为read/write不需要直接调用而调用或类似调用的本地缓冲区的好方法new.)
也就是说,缺少额外的间接级别,加上编译时常量,可以std::array大大加快创建/销毁/访问的非常小的数组.
所以我的建议是:使用std::vector除非(a)你的探查器告诉你有问题和(b)阵列很小.
Nic*_*las 22
我假设你知道std :: array的编译时是固定大小的,而std :: vector是可变大小的.另外,我假设您知道std :: array不进行动态分配.所以相反,我会回答你为什么要使用std :: array而不是std :: vector.
你有没有发现自己这样做:
std::vector<SomeType> vecName(10);
Run Code Online (Sandbox Code Playgroud)
那你从来没有真正增加std :: vector的大小?如果是这样,那么std :: array是一个不错的选择.
但实际上,std :: array(加上初始化列表)的存在使C风格的数组几乎完全没用.它们通常不与std :: vectors竞争; 他们与C风格阵列竞争更多.
可以把它想象成C++委员会尽最大努力消灭几乎所有合法使用的C风格数组.
Luc*_*ton 14
std::array
std::vector一个很好的用例是在做"接近金属"的事情时,同时保留C++的细节并保持原始数组的所有坏处.
| 归档时间: |
|
| 查看次数: |
77793 次 |
| 最近记录: |