12
我有問題,當我想通過使用迭代器更改集的元素。 這個簡單的代碼可以解釋我想要做什麼。通過迭代器更改元素
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
爲什麼我不能改變指向的值正常的迭代器,而不是常量性?
在我的代碼迭代器是由set :: find()返回。也許是更好的方法從集合中挑選特定的元素並改變他。
+1:雖然這留下了一個問題:爲什麼'begin'返回一個非''contst'迭代器? – 2011-12-25 01:17:04
返回一個正常的迭代器是令人困惑的,但現在至少可以理解爲什麼我會得到這個錯誤。非常感謝。 – Scypi 2011-12-25 01:28:55
@OliCharlesworth,Scypi:這有點棘手,迭代器不是'const_iterator',而是一個* mutable *迭代器。它是可以被索引的Key,它是不可變的。 §23.2.4p5*「[...]關聯容器中的鍵是不可變的。」*至於爲什麼它們總是提供非const的begin()和end(而不是const_iterator),我猜測它是儘可能保持容器接口的一致性。特別是§23.2.4p6指出,在這種情況下'iterator'和'const_iterator' *類型可以是相同的,並建議總是使用'const_iterator'來避免ODR違規。 – 2011-12-25 10:15:48