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

Obl*_*ons 2 c++ stl

这是非常基本的.

我记得在某个地方发现了一个警告(我现在找不到),你不应该直接修改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();
}
Run Code Online (Sandbox Code Playgroud)

我不想在这里用多线程或任何东西做任何事情.那应该没事,对吧?如果它是一个装满物体的容器会不会有任何不同,我在其中一个上面调用了一个mutator?

Joh*_*ela 6

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

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

  2. 对于某些容器 - 尤其是std::vector- 如果您的操作(例如push_back)使迭代器无效并且您正在使用在操作之前获得的迭代器,则必须小心.

根据您的情况,我认为您的工作没有问题.