c++中如何删除vector中重复的元素,我用了两个迭代器编译说不兼容,我晕

2025-02-26 04:18:58
推荐回答(3个)
回答1:

erase()函数会返回它删除的下一个元素
所以删除后你的迭代器j编程野的了即 j失效
安全办法
j=colour.erase(j);j++

回答2:

由于erase之后,vector之后的内存重新分配,j指针再++就会出错。
vector::iterator i=colour.begin();
vector::iterator j=i+1;
int dis = 0;
while(i!=colour.end()-1)
{
j=i+1;
while(j!=colour.end())
{
if ((*i).compare(*j)==0)
{
dis = j-i;
colour.erase(j);
j=i+dis;
}
else
{
j++;
}
}
i++;
}

回答3:

#include
using namespace std;
int main()
{
vector A;
A.push_back(1);
A.push_back(2);
A.push_back(1);
A.push_back(2);
sort(A.begin(),A.end());

vector::iterator t,x;
x = unique(A.begin(),A.end());
for(t=A.begin(); t!=x; t++) //print 1 2
printf("%d\n",*t);
return 0;
}