我已经看到了这个问题的其他一些解决方案,但是我想理解为什么我的解决方案不起作用 - 它似乎陷入了循环,但我无法想象为什么。我的猜测是迭代器不会像我想的那样移动,或者我可能错过了一些愚蠢的错误。
void makeunique(list<int> &L)
{
for(auto it1=L.begin(); it1!=L.end(); it1++)
for(auto it2=it1; it2!=L.end(); it2++)
if(it2==it1) it2++;
else if(*it1==*it2) L.erase(it2);
}
我的想法是用两个循环遍历列表,其中第一个循环选择要比较的元素,第二个循环找到要比较的元素,直到第一个迭代器之后开始直到结束。