2012-03-14 97 views
0

Possible Duplicate:
C++ STL set update is tedious: I can't change an element in place为什么这个迭代器是const?

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

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

我得到错误:“与_TP = INT it.std :: _ Rb_tree_const_iterator < _TP> ::运算符*”

+0

看完链接后,我明白了。我不喜欢它,但它是有道理的。 – 2012-03-14 20:28:49

+0

他们这样做是因为否则他们不能保持“侵入”(他们不能保证它仍然被排序),这将使'set'失效。 – 2012-03-14 20:41:18

回答

3

只读位置的分配因为它是一个set。集合使用常量迭代器是因为你不能改变值而不会搞乱集合的顺序。

3

所有集迭代器都是const。您无法通过迭代器进行分配来更新集合成员的值。您必须erase旧值和insert一个新的。

1

因为在C++ 11集合<> :: iterator与集合<> :: const_iterator相同。即你不能修改集合中的元素。

相关问题