我需要成对合并列表元素,合并前两个,然后合并后两个,依此类推,如果没有对,则保持最后一个元素不变。例如,如果我通过添加对将数字列表从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;
如何像这样成对迭代列表?
答案 0 :(得分:0)
像
这样的东西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));
}
这应该合并您在示例中显示的每对连续元素,并将它们填入新列表中。