2017-05-24 69 views
1

我想知道我怎麼可以刪除一個向量的元素,同時保持迭代器在這裏,我循環通過int類型的向量的向量:刪除元素在遍歷嵌套向量

vector< vector<int> >::iterator row; 
vector<int>::iterator col; 
for (row = vvi.begin(); row != vvi.end(); row++) { 
    for (col = row->begin(); col != row->end(); col++) { 
     if(*col==55) 
     { 
      // col=row.erase(col); ? 
     } 

    } 
} 
+2

的可能的複製[而對於各做一個從一個std ::向量刪除?](https://stackoverflow.com/questions/3938838/erasing-from-a-stdvector-while-doing-a-for-每個) – nakiya

回答

0

在你的代碼,如果有多個元素等於55,則會有多次擦除向量元素,這將花費很多開銷來移動元素。 更好的解決方案是按照erase-remove idiom到所有限定的元素移動到向量的末尾,則在一個時間一起擦除它們。 例如:

vector< vector<int> >::iterator row; 
vector<int>::iterator col; 
for (row = vvi.begin(); row != vvi.end(); row++) { 
    row->erase(std::remove(row->begin(), row->end(), 55), row->end()); 
} 

的std ::刪除將所有的元件,其等於55移動到矢量的結束並返回它們的頭部的迭代器。 row-> erase(iterator1,iterator2)將擦除2個迭代器之間的所有元素。

而且你不需要無所謂了迭代器。

+1

嗯,它表示刪除不符合標準? –

+0

嘗試#包括 walker

+1

是的,它測試出來,不是在整數上,而是在類人類,例如類和性質的年齡,我試圖用行 - >年齡替換55,但它不被認可,任何想法爲什麼? –