我注意到在有效的STL
向量是这样一种序列 默认情况下应该使用。
这是什么意思?似乎忽略效率向量可以做任何事情。
谁能给我一个场景,其中向量不是一个可行的选择,但必须使用列表?
我注意到在有效的STL
向量是这样一种序列 默认情况下应该使用。
这是什么意思?似乎忽略效率向量可以做任何事情。
谁能给我一个场景,其中向量不是一个可行的选择,但必须使用列表?
当前回答
在表格中总结答案以供快速参考:
Vector | List | |
---|---|---|
Access | Faster | Slower |
Insert/Delete Operations | Slower | Faster |
Memory Allocation | Contiguous | Non-contiguous |
Size Pre-allocation | Need to be reserved | Not necessary to reserve |
Space Required Per Element | Only for the element itself | For element and pointers to next (and optionally previous elements) |
其他回答
在表格中总结答案以供快速参考:
Vector | List | |
---|---|---|
Access | Faster | Slower |
Insert/Delete Operations | Slower | Faster |
Memory Allocation | Contiguous | Non-contiguous |
Size Pre-allocation | Need to be reserved | Not necessary to reserve |
Space Required Per Element | Only for the element itself | For element and pointers to next (and optionally previous elements) |
如果你不需要经常插入元素,那么向量会更有效。它具有比列表更好的CPU缓存位置。换句话说,访问一个元素使得下一个元素很有可能存在于缓存中,并且可以在不读取慢速RAM的情况下被检索。
当你在序列中间有很多插入或删除时。例如,内存管理器。
基本上,vector是一个具有自动内存管理功能的数组。数据在内存中是连续的。试图在中间插入数据是一项代价高昂的操作。
在列表中,数据存储在不相关的内存位置。在中间插入数据并不需要复制一些数据来为新数据腾出空间。
为了更具体地回答你的问题,我将引用这一页
对于访问元素以及从序列末尾添加或删除元素,向量通常是最有效的。对于涉及在末尾以外的位置插入或删除元素的操作,它们的性能不如deques和list,并且迭代器和引用的一致性也不如list。
列表只是stl中double - linkedlist的包装器,因此提供了您可能希望从d-linklist中获得的功能,即O(1)插入和删除。 向量是具有传染性的数据序列,其工作方式类似于动态数组。S-更容易遍历。