這個是在一次面試時候問的,刪除vector中的一個指定元素
// 剛開始是這樣的,刪除vector中的一個等於target的元素,
我一想不就是這個,多簡單,上手就是寫個這。結果,我艹直接死循環(一臉尷尬,多么簡單的題)。
然后調了一會,沒調出來(我是忽略了erase的返回值了,erase返回刪除當前元素的下一個節點的迭代器,但是我有讓他it++了,所以就錯了)
(然后面試官說,先不看這個了,先問問其他的,等會再寫)
void fun(vector<int> &vec, int target) { for(auto it = vec.begin(); it != vec.end(); it++) { if(*it == target) { it = vec.erase(it); } } } int main() { vector<int>vec = {2,4,62,2,33,33,33}; fun(vec, 33); for(int i = 0; i < vec.size(); i++) { cout << vec[i] << " "; } return 0; }
。。。。。 接着開始寫一些鏈表的題目。。。。。
最后面試官說,你在想想erase,或者vector刪除一個元素后的返回值。
我就說,我在寫一遍試試,改改。
突然想起了,我艹。讓它自增了,不該上來就把for循環的it++寫上
一個continue就行了,主要是細節東西沒注意,
void fun(vector<int> &vec, int target) { for(auto it = vec.begin(); it != vec.end(); ) { if(*it == target) { it = vec.erase(it); continue; } it++; } }
回去等通知吧。。。