c++成对合并列表元素

C++ Merge List Elements in Pairs

本文关键字:列表元素 合并 c++      更新时间:2023-10-16

我需要成对地合并列表元素,合并前两个,然后是第二个两个,依此类推,如果没有成对,则保持最后一个元素不变。例如,如果我通过对相加来合并从0到10的数字列表,我将从上面的列表到下面的列表。

0 1 2 3 4 5 6 7 8 9 10
1   5   9   13  15  10

(为了可读性,第二个列表中有额外的空白,但它的大小应该是6,并且不应该有任何空元素。)这是一个非常简单的例子;我的实际程序使用了一个合并函数

void merge(Obj *a, Obj *b)

指向对象的指针列表

std::list<Obj*> myList;

我如何像这样成对地遍历一个列表?

类似

std::list<*Obj> newList;
std::list<*Obj>::iterator itFirst = myList.begin();
std::list<*Obj>::iterator itSecond = myList.begin();
itSecond++; // move to element 1
for ( ; 
      itFirst != myList.end();
      std::advance(itFirst, 2), std::advance(itSecond, 2) )
{
    newList.push_back(merge(*itFirst, *itSecond));
}

这将合并示例中所示的每对连续元素,并将它们填充到一个新列表中。