遍历列表

时间:2011-03-24 20:17:00

标签: c++ list conditional-statements infinite-loop

我试图一次遍历一个列表2的值,但由于某种原因,它陷入无限循环

我有:

list<mystruct> a, b; // defined, each guaranteed to have at least 1 value

a.insert(a.end(), b.begin(), b.end());
a.sort(mysort);
list<mystruct>::iterator it1 = a.begin(), it2 = it1// or = a.begin(), it doesnt seem to make a difference
it2++;

while(it2 != a.end()){// im not sure if this condition is correct; probably the error
    if (<condition>){
        // stuff
        a.erase(it2);
    } 
    else{
        it1++;
        it2++;
    }
}

说组合列表a{1,2,3,3,4,5,6,6,6,7},而我正在尝试删除重复项。我试图先得到* i = 1和* j = 2,然后向下移动所以* i = 2和* j = 3.我在这段代码中做错了什么?

我是c ++列表的新手,很抱歉,如果这个问题听起来很愚蠢

2 个答案:

答案 0 :(得分:4)

您想使用it2 = a.erase(it2);,否则it2将指向您从列表中删除的元素。 a.erase返回it2之后的元素。

答案 1 :(得分:3)

由于您的列表似乎已排序,并且您想要删除重复项,请使用unique

a.unique();

然后你不必乱用迭代器,擦除等等。

请参阅http://www.cplusplus.com/reference/stl/list/unique/