我想通过使用迭代器来改变set中的元素,但遇到问题。以下简单代码可以解释我的意图。
set<int> s;
s.insert(12);
set<int>::iterator it = s.begin();
*it = 4; // error C3892: 'it' : you cannot assign to a variable that is const
为什么我不能修改正常迭代器所指向的值,而只能修改const_iterator所指向的值?
在我的代码中,迭代器是由set::find()返回的。也许有更好的方法从set中选择特定元素并进行更改。
begin
返回一个非const
迭代器? - Oliver Charlesworthconst_iterator
,而是可变迭代器。可以索引的是Key
,它是不可变的。§23.2.4p5 *"[...]关联容器中的键是不可变的。"*至于为什么提供非constbegin()
和end(而不是始终使用const_iterator
),我猜测这是为了尽可能保持容器接口的统一性。特别是§23.2.4p6指出,在这种情况下,类型iterator
和const_iterator
可以相同,并建议始终使用const_iterator
以避免ODR违规。 - David Rodríguez - dribeas