2

这个很基础。

我记得在某处看到一个警告(我现在找不到),大意是您不应该直接修改 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,它会有什么不同吗?

4

1 回答 1

6

我认为您在更新容器时混淆了两件事:

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

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

就您的情况而言,我认为您正在做的事情没有问题。

于 2013-04-16T02:59:46.293 回答