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

时间:2013-04-16 02:51:39

标签: 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();
}

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

1 个答案:

答案 0 :(得分:6)

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

  1. std::set更新值不安全,因为这会更改不变量(请参阅what happens when you modify an element of an std::set?

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

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