【问题标题】:Is it safe to modify the contents of STL containers?修改 STL 容器的内容是否安全?
【发布时间】:2013-04-16 02:51:39
【问题描述】:

这个很基础。

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

【问题讨论】:

  • 你的意思是什么修改?人们一直将向量作为 C 数组传递。

标签: c++ stl


【解决方案1】:

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

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

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

    李>

根据你的情况,我认为你的做法没有问题。

【讨论】:

  • 哦,这确实更有意义!为了确定,我将把这个问题再留几分钟,但我认为你在它的谚语头上击中了谚语的钉子。谢谢!
  • 这个答案很好。请注意,vector::push_back 可能会使迭代器指向其成员的指针无效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多