【发布时间】:2017-02-05 13:00:03
【问题描述】:
它是否将所有元素从向量的右侧移动(如果擦除则移动到左侧 1 个位置,如果插入则移动到右侧 1 个位置)还是像链表一样(它创建一个新地址并创建一个新地址。 此外,当我用字符串初始化向量时,它是如何处理内存的。 如果它按顺序存储它,当它达到其最大内存分配时我们继续执行 push_back 会发生什么。
【问题讨论】:
-
如果您关心速度,请始终进行基准测试,不要陷入旧的“O(N) vs O(1) 所以 O(1) 更快”的陷阱。一般来说,如果您使用 std:: 并且关心速度,那么 vector 几乎总是正确的选择。每个其他容器都会做“坏事”(坏事意味着追逐指针——即使是不应该喜欢无序映射的事情)
-
您可能想观看 "Modern C++: What You Need to Know - Herb Sutter",从演示开始大约 46 分钟开始:channel9.msdn.com/Events/Build/2014/2-661 Random inserts/deletes using std ::vector 与 std::list 相比,向量在多达 500,00 个元素(大约)时表现更好(也比 std::map 更好)