所以我刚才正在阅读上面的内容,我注意到以下引用:
std::vector
仅当不发生重新分配时,才能保证元素的迭代器和地址稳定性
假设我有一个std::vector<>
泛型类型的成员T*
(T
代表任何东西)。该成员本身是指向 中第一个元素的指针,std::vector<>
因为堆分配的缓冲区在内存中是连续的,并且迭代器只是sizeof(T)
针对 中每个元素的指针移动字节std::vector<>
。
在std::vector<>
泛型类型中T*
,至少根据我的理解,每个元素的指针只是一个指向指针的指针。尽管如此,这意味着上述地址稳定性仅适用于元素指针,而不适用于元素处的指针,对吧?
对,那是正确的。向量指向的项目不必更改,因此您的其他资源可以安全地依赖这些值。不过,向量指针的内存位置将会改变,因为这就是重新分配的作用。