从一个vector 删除元素:
#include <vector>
#include <iostream>
using namespace std;
int main()
{
std::vector<double> myDouble;
std::vector<double> ::iterator it;
for(int i=1;i<11;i++){myDouble.push_back(i);}
for(it=myDouble.begin();it!=myDouble.end();it++){
if(*it == 5){
myDouble.erase(it);}
}
int i=1;
for(it=myDouble.begin();it!=myDouble.end();++it){
cout<<i++<<'\t'<<*it<<std::endl;}
}
以上代码在release 下工作正常,但在debug下出错(VS2012). 原因是在执行erase后,不知道编译器如何处理指针。debug发现是在删除后指向了下一个地址,但在进入下个循环后报错。很奇怪。
把删除换为以下代码:
#include <vector>
#include <iostream>
using namespace std;
int main()
{
std::vector<double> myDouble;
std::vector<double> ::iterator it;
for(int i=1;i<11;i++){myDouble.push_back(i);}
it = myDouble.begin();
while(it != myDouble.end()){
if(*it == 5){
myDouble.erase(it);}
else{
++it;}
}
/*
for(it=myDouble.begin();it!=myDouble.end();it++){
if(*it == 5){
myDouble.erase(it);}
}
*/
int i=1;
for(it=myDouble.begin();it!=myDouble.end();++it){
cout<<i++<<'\t'<<*it<<std::endl;}
}
同样是相似的问题。release没问题,debug报错。
以下代码解决问题:
#include <vector>
#include <iostream>
using namespace std;
int main()
{
std::vector<double> myDouble;
std::vector<double> ::iterator it;
for(int i=1;i<11;i++){myDouble.push_back(i);}
for(it=myDouble.begin();it!=myDouble.end();){
if(*it == 5){
it = myDouble.erase(it);}
else{
++it;}
}
int i=1;
for(it=myDouble.begin();it!=myDouble.end();++it){
cout<<i++<<'\t'<<*it<<std::endl;}
}