地址变成常量向量,在非常量向量内,是稳定的吗?

  • 本文关键字:常量 向量 非常 地址 c++ vector
  • 更新时间 :
  • 英文 :


如果我有一个std::vector<std::vector<char>>

其中下列为真:

  • 内部向量的大小永远不会改变
  • 外部向量的大小随着插入和移除而改变

我可以像这样将地址放入内部向量,在修改外部向量后使用它,并且是安全的吗?

std::vector<std::vector<char>> buffer;
#include <code that inserts into "buffer" uhhh 10 vectors with 100 char each>
char * ch = buffer[5].data();
// example of code that never erases/resizes the vector "ch" is pointing into...
// ... BUT will remove/insert vectors around it, prompting "buffer" to reallocate
buffer.erase(buffer.begin(), buffer.begin() + 4); 
buffer.shrink_to_fit();
buffer.insert(buffer.begin(), std::vector<char>(1)); 
assert(buffer[1].data() == ch);    // the 5th inner-vector moved to index 1
printf("how is this bit%c?", *ch); // but hopefully "ch" is still valid?

如果外部向量必须增长,它将分配一个新的缓冲区并将所有内部向量移动到该缓冲区中。这意味着这些内部向量的地址会改变,但这并不意味着内部向量的缓冲区地址会改变。它们将保持不变,因为vector被要求在移动vector时不会使指向vector元素的任何迭代器/引用/指针失效。

最新更新