修改STL容器的内容是否安全?

Is it safe to modify the contents of STL containers?

本文关键字:是否 安全 STL 修改      更新时间:2023-10-16

这个很基础。

我记得在某个地方看到一个警告(我现在找不到),大意是你不应该直接修改STL容器的内容,因为它可能会破坏容器的内部记录保存。由此可见,只要有需要修改的元素,就应该使用boost的ptr_containers之类的东西。

这就是我想要做的:

int main (int argc, char *argv[]) {
    std::vector<int> jambone;
    jambone.push_back(2);
    jambone.front() = 4;
    std::cout<< jambone.front();
}

我并没有试图在这里用多线程或任何东西做任何奇怪的事情。应该没问题,对吧?如果它是一个充满对象的容器,并且我对其中一个对象调用了mutator,会有什么不同吗?

我想你对更新容器的两件事感到困惑:

  1. std::set更新值是不安全的,因为这会改变不变量(看看当你修改std::set的元素时会发生什么?)

  2. 对于某些容器,特别是std::vector,如果操作(如push_back)使迭代器无效,并且使用的是操作之前获得的迭代器,则必须小心。

以你的情况,我看不出你所做的有什么问题。