【问题标题】:Why is this iterator const? [duplicate]为什么这个迭代器是常量? [复制]
【发布时间】:2012-03-14 20:20:54
【问题描述】:

可能重复:
C++ STL set update is tedious: I can't change an element in place

为什么这段代码抱怨我的参数是一个 const_iterator,但它没有这样声明?

void foo(std::set<int>::iterator it)
{
  *it=2;
}

我收到错误:分配只读位置'it.std::_Rb_tree_const_iterator<_tp>::operator* with _Tp = int'

【问题讨论】:

  • 看了链接,明白了。我不喜欢它,但它是有道理的。
  • 他们这样做是因为否则他们无法维护“不变量”(他们不能保证它仍然是排序的),这将使set 无法工作。

标签: c++ stl


【解决方案1】:

因为它是set。集合使用 const 迭代器,因为您不能在不弄乱集合顺序的情况下更改值。

【讨论】:

    【解决方案2】:

    所有集合迭代器都是const。您不能通过迭代器分配来更新集合成员的值。您必须erase 旧值和insert 新值。

    【讨论】:

      【解决方案3】:

      因为在 C++11 中 set::iterator 与 set::const_iterator 相同。 IE。您不能修改集合内的元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-18
        • 2014-05-17
        • 2011-04-16
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多