2012-03-19 26 views
3

當我執行下面的代碼時,我得到map/set迭代器不會增加錯誤。map/set迭代器在C++中不會增加錯誤

typedef std::multimap<int, int> MapType; 

assgnt::MapType my_map; 
assgnt::MapType::iterator it; 
for(it = my_map.begin(); it != my_map.end();) 
{ 
    my_map = obj1.addGoodNeighbours(it->first, it->second, my_map); 
    ++it; 
} 

請幫

+2

你爲什麼不把'++ it'直接進入的結構? – 2012-03-19 01:51:48

+0

我也試過這個...得到相同的錯誤...在google上搜索時,我發現某處有那個++,它被取出來用於循環,並且對它們有效......但它不適用於我。 – user1277070 2012-03-19 01:54:19

+0

我們需要知道這個'MapType'是什麼。顯然不是一個簡單的'std :: map'? – leftaroundabout 2012-03-19 01:55:03

回答

5

我不知道assgnt::MapType是什麼,但對於循環分配另一個assgnt::MapTypemy_map裏面的,不可能是一件好事:

my_map = obj1.addGoodNeighbours(it->first, it->second, my_map); 

你應至少重新分配迭代器:

for(it = my_map.begin(); it != my_map.end(); ++it;) { 
    my_map = obj1.addGoodNeighbours(it->first, it->second, my_map); 
    it = my_map.begin(); 
} 

但我相信代碼是不正確的。你基本上是在迭代它的時候摧毀你正在迭代的結構。

編輯:嗯,我們知道MapType是什麼。以上所有內容仍然正確。您不能在迭代他們的時候重新分配您的地圖。

+0

MapType是 - typedef std :: multimap MapType; – user1277070 2012-03-19 01:58:09

+0

assgnt是我的班級名稱,其中「typedef std :: multimap MapType;」被宣佈爲 – user1277070 2012-03-19 01:59:08

+1

好的。我們不知道obj1.addGoodNeighbours做了什麼。 – mfontanini 2012-03-19 02:00:30

1

您正在修改地圖,而您正在迭代它。它不支持std容器,因此這是您程序中的一個錯誤。目前,您完全覆蓋了該對象,但更詳細,即使添加元素也不受支持。

你會得到這個錯誤可能是因爲你處於調試模式,如果這只是在生產中崩潰,我不會感到驚訝。

要實現你可以使用一個臨時的地圖相同的效果:

assgnt::MapType my_map; 
assgnt::MapType tmp; 

for (auto it = my_map.begin(); it != my_map.end(); +it) { 
    // you need to change addGoodNeighboors to add elements in place instead of creating a new map 
    obj1.addGoodNeighbours(tmp, it->first, it->second, my_map); 
} 

my_map.insert(begin(tmp), end(tmp)); 
+0

你在for循環中忘了額外的'+'。 '+ i' – 2017-08-02 12:05:40