我有一個關於std :: map迭代器行爲的問題。如果我理解正確,std :: map :: const_iterator不允許更改容器中的任何內容,但std :: map :: iterator允許同時更改它的第二個值和關鍵集合(即迭代時添加/刪除元素等)。在我的情況下,我需要允許更改值,但不是密鑰集。即我需要像這樣:迭代器爲std :: map,允許修改值,但不能插入/刪除
std::map<int,int>::iterator it=m.begin()
while(it!=m.end())
{
++it->second; // OK: modifying of values is allowed
if(it->second==1000)
m.erase(it++); // Error: modifying the container itself is not allowed
else
++it;
}
看起來像標準迭代器不區分改變值和更改容器結構。有沒有辦法通過實現一個自定義迭代器來施加這個限制?
我覺得'erase'僅僅依賴於map實例的常量而不是迭代器。 – user1781290
你有沒有試過讓容器保持不變?但是,你會如何爲它添加值呢? – Gasim
問題是我無法從常量容器中獲取非常量迭代器。至於你的問題,給地圖增加值可以在一個函數中完成,並在另一個函數中迭代。這不是問題,這在許多用例中通常會發生。 – bkxp