这个是在一次面试时候问的,删除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++; } }
回去等通知吧。。。