【C/C++】C++primer习题9.26中删除元素问题

来源:互联网 发布:联想网络同传 编辑:程序博客网 时间:2024/05/18 02:31

将一个数组a[ ]={0,1,1,2,3,5,8,13,21,55,89}复制到一个vector容器中,使用单个迭代器参数版本的erase函数将vector中的偶数元素删除掉。

下面有2个删除元素的方法:

int a[] = {0,1,1,2,3,5,8,13,21,55,89};vector<int> vec(a,a+11);for(iter2;iter2!=vec.end();++iter2){if(*iter2%2==0){iter2 = vec.erase(iter2);--iter2;//这里会出错}}

这里会出错,当如果vec中的第一个元素被删除时,在执行完erase函数后,返回的iter2指向删除元素的后一个元素(此时这个元素为第一个元素),再执行--iter2会出现运行时错误。

正确的做法为:

vector<int>::iterator iter2 = vec.begin();while(iter2!=vec.end()){if(*iter2%2==0){iter2 = vec.erase(iter2);}else++iter2;}


0 0
原创粉丝点击