如何在c ++中删除列表中的一对重复出现?(保留只出现一次的元素)

lil*_*ily 3 c++ algorithm stl list

我尝试过使用uniqueunique只删除了副本.

我的程序假设要做的是例如列表包含1,2,2,2,3,4,4.我想只删除重复的数字对,输出应该是1,2,3(一对2和4被删除).

mas*_*oud 5

迭代数据并删除对(实时代码):

list<int> data{1, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 6};

for (auto i = data.begin(); i != data.end();)
{
    auto n = std::next(i);

    if (n == data.end())
        break;

    if (*i == *n)
    {
        i = data.erase(i);
        i = data.erase(i);
    }
    else
        i++;
}
Run Code Online (Sandbox Code Playgroud)

产量

1 2 3 4 5 6 
Run Code Online (Sandbox Code Playgroud)

也是1 2 3 为了1 2 2 2 3 4 4.

 

上面的代码从C++ 11开始工作,如果你没有它,试试这个:

for (list<int>::iterator i = data.begin(); i != data.end();)
{
    list<int>::iterator n = i; 
    n++;

    if (n == data.end())
        break;

    if (*i == *n)
    {
        i = data.erase(i);
        i = data.erase(i);
    }
    else
    i++;
}
Run Code Online (Sandbox Code Playgroud)