gpt4 book ai didi

c++ - 地址在非常量 vector 中的常量 vector 中是否稳定?

转载 作者:行者123 更新时间:2023-12-04 14:03:21 25 4
gpt4 key购买 nike

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

以下情况为真:

  • 内部 vector 的大小永远不会改变
  • 外部 vector 的大小随插入和删除而改变

我能不能像这样把一个地址取到内部 vector 中,修改外部 vector 后使用它,并且安全?

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 的地址会改变,但这并不意味着内部 vector 的缓冲区地址会改变。它们将保持不变,因为 vector 需要在移动时不使指向 vector 中元素的任何迭代器/引用/指针无效。

关于c++ - 地址在非常量 vector 中的常量 vector 中是否稳定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69287920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com