c++標準庫中的remove函式,看上去好像是用來"remove"字串裡的特定字元,如:
string a="123";
remove(a,'1');
但是實際結果並不是“23”而是“233”。
因為remove的刪除操作是基於移動元素,即用後面的元素覆蓋前面的元素。如果想要實現刪除的操作,應該結合erase函式。
原理是remove會返回最後一個刪除元素的下一個迭代器的位置,因此正確做法如下:
a.erase(remove(a.begin(), a.end(), '1'), a.end());
在理解remove的原理之後,我們發現在一些場合下remove函式刪除特定字元的效率並不高。比如在vector中,我們刪除特定元素就免不了移動元素,因此用remove也無所謂了,但是在list中,移動元素完全是不必要的,因此c++的list中本身含有自身的remove成員函式。
參考博文:STL的remove函式和list的remove成員函式 - kinuxroot - 部落格園 (cnblogs.com)