您的位置:首页 > 其它

vector类型为结构体,根据结构体成员来删除对应的结点

2013-09-27 17:12 369 查看
通过iterator来遍历vector成员用erase删除结点会出现错误,

如下程序:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct cuttime{

int index;
long begin;
long end;
};
vector<cuttime> vec_cutdata;
vector<cuttime>::iterator cutdata_iter;

int main()
{
cuttime cut1,cut2,cut3,cut4;
cut1.index=1;
cut1.begin=5;
cut1.end=10;

cut2.index=2;
cut2.begin=6;
cut2.end=12;

cut3.index=3;
cut3.begin=7;
cut3.end=14;
cut4.index=4;
cut4.begin=8;
cut4.end=15;

vec_cutdata.push_back(cut1);
vec_cutdata.push_back(cut2);
vec_cutdata.push_back(cut3);
vec_cutdata.push_back(cut4);

vector<cuttime>::iterator  it;
for(it=vec_cutdata.begin();it!=vec_cutdata.end();)
{
if (it->index==3)
{
vec_cutdata.erase(it);
}

}

for(cutdata_iter=vec_cutdata.begin();cutdata_iter!=vec_cutdata.end();++cutdata_iter)
{
cout<<cutdata_iter->index<<" "<<cutdata_iter->begin<<" "<<cutdata_iter->end<<" "<<endl;
}
return 1;
}


程序是想删除结构体成员中index等于3的那个结点,但是程序输出会出现错误。原因是当vec_cutdata.erase(it);之后it失效了,接下来的循环就会出现异常。所以该方法行不通了。

下面提供两种方法根据结构体成员值来删除对应结点:

方法一:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct cuttime{

int index;
long begin;
long end;
};
vector<cuttime> vec_cutdata;
vector<cuttime>::iterator cutdata_iter;

int main()
{
cuttime cut1,cut2,cut3,cut4;
cut1.index=1;
cut1.begin=5;
cut1.end=10;

cut2.index=2;
cut2.begin=6;
cut2.end=12;

cut3.index=3;
cut3.begin=7;
cut3.end=14;
cut4.index=4;
cut4.begin=8;
cut4.end=15;

vec_cutdata.push_back(cut1);
vec_cutdata.push_back(cut2);
vec_cutdata.push_back(cut3);
vec_cutdata.push_back(cut4);

vector<cuttime>::iterator  it;
for(it=vec_cutdata.begin();it!=vec_cutdata.end();)
{
if (it->index==3)
{
it=vec_cutdata.erase(it);
}
else
++it;

 }

for(cutdata_iter=vec_cutdata.begin();cutdata_iter!=vec_cutdata.end();++cutdata_iter)
{
cout<<cutdata_iter->index<<" "<<cutdata_iter->begin<<" "<<cutdata_iter->end<<" "<<endl;
}
return 1;
}


方法二:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct cuttime{

int index;
long begin;
long end;
};
vector<cuttime> vec_cutdata;
vector<cuttime>::iterator cutdata_iter;

int main()
{
cuttime cut1,cut2,cut3,cut4;
cut1.index=1;
cut1.begin=5;
cut1.end=10;

cut2.index=2;
cut2.begin=6;
cut2.end=12;

cut3.index=3;
cut3.begin=7;
cut3.end=14;
cut4.index=4;
cut4.begin=8;
cut4.end=15;

vec_cutdata.push_back(cut1);
vec_cutdata.push_back(cut2);
vec_cutdata.push_back(cut3);
vec_cutdata.push_back(cut4);

for(size_t i=0;i<vec_cutdata.size();)
{
if(vec_cutdata[i].index==3)
{
vec_cutdata.erase(vec_cutdata.begin()+i);
}
else
++i;
}

 for(cutdata_iter=vec_cutdata.begin();cutdata_iter!=vec_cutdata.end();++cutdata_iter)
{
cout<<cutdata_iter->index<<" "<<cutdata_iter->begin<<" "<<cutdata_iter->end<<" "<<endl;
}
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐