【发布时间】:2017-03-08 00:29:21
【问题描述】:
如果我定义vector<double> v;,这个向量会占用连续的内存槽吗?如果它占用连续的内存槽,如果我在这个向量中添加一些新元素,而在最后一个元素之后没有足够的内存槽,会发生什么?
【问题讨论】:
-
是的。如果元素不适合当前分配的空间,它将重新分配元素。
-
这称为连续存储,有两个标准容器可以保证它:向量和数组。在 C++17 中,他们将添加一个具有此保证的迭代器:ContiguousIterator。
-
这种存储允许您以 O(1) 复杂度(非常快)检索此类数据结构中的元素。
-
@Spidey 它也恰好是 C 兼容的(通过传递从 .data() 检索到的指针)