c++ - 假设 STL vector 存储总是连续的是否安全?

标签 c++ stl vector

如果您有一个已调整大小的 STL vector ,是否可以安全地获取元素 0 的地址并假设该 vector 的其余部分将跟随在内存中?

例如

vector<char> vc(100);
// do some stuff with vc
vc.resize(200);
char* p = &vc[0];
// do stuff with *p

最佳答案

是的,这是一个有效的假设 (*)。

来自 C++03 标准 (23.2.4.1):

The elements of a vector are stored contiguously, meaning that if v is a vector where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size().

(*) ...但要注意在向其添加元素后重新分配的数组(使任何指针和迭代器无效)。

关于c++ - 假设 STL vector 存储总是连续的是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/247738/

相关文章:

c++ - std::vector 的 push_back 是否创建参数的深层拷贝?

c++ - CMake:构建库并将其链接到可执行文件导致 undefined reference 错误

c++ - 如何将 Boost.Coroutine 与 Boehm GC 结合使用?

c++ - 如何跨多个线程在 COM 中使用 LoadLibrary?

c++ - 为什么没有标准的 C++ 数学库 <math> 而不是 C 包装器 <cmath>?

c++ - 如何保留指向插入集合然后插入 vector 的对象的指针?

c++ - cuda 文件没有链接到 C 文件中定义的函数

c++ - std::map 键的问题

c++ - 从 SDL_Rect 的 vector 在 SDL 中传输表面的问题

Matlab:相关数