为什么这个迭代器常量

Why is this iterator const?

本文关键字:常量 迭代器 为什么      更新时间:2023-10-16

可能重复:
C++STL集更新是乏味的:我可以';t在中更改元素

为什么这段代码抱怨我的参数是const_iterator,而它没有以这种方式声明?

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

我得到错误:分配只读位置'it.std::_Rb_tree_const_iterator&lt_Tp>::运算符*,带_Tp=int’

因为它是set。集合使用常量迭代器,因为您无法在不打乱集合顺序的情况下更改值。

所有集合迭代器都是const。不能通过迭代器进行赋值来更新集合成员的值。您必须erase为旧值,insert为新值。

因为在C++11中设置<>:迭代器与set<>相同:const_iterator。也就是说,不能修改集合中的元素。