STL容器的连续性及其访问:vector和deque
vector
在 C++ 标准库中,std::vector的元素始终存储在连续的内存空间中,这是vector的核心特性之一,与是否通过push_back添加元素无关。
具体来说:
当使用push_back添加元素时,如果当前vector的容量(capacity)足够容纳新元素,新元素会直接添加到现有内存块的末尾,其地址与前一个元素地址连续(间隔为元素类型的大小)。
如果容量不足,vector会自动重新分配一块更大的连续内存,将原有元素移动或复制到新内存块中,然后添加新元素。此时,原有元素的地址会失效,但新内存块中的所有元素(包括刚通过push_back添加的元素)仍然是连续存储的。
因此,无论push_back过程中是否发生内存重新分配,当前vector中所有元素的地址一定是连续的。这一特性使得vector可以像原生数组一样,通过指针偏移高效访问元素(例如&v[0] + i访问第i个元素)。
vector<int> xVec;xVec.push_back