在C++中迭代部分列表

use*_*012 1 c++ iterator

我是C++的新手,我正在研究合并排序的实现,以帮助我熟悉语言.

目前我有一个整数列表,我想创建2个子列表,并将原始列表的前半部分存储到名为"left"的列表中,将剩下的一半存储到名为"right"的列表中

例如:假设我的原始列表数据是16,24,56,12,89; 我想迭代这个列表,将16,24添加到一个新的子列表'left'并将56,12,89添加到子列表'right'所以左边会导致[16,24]而右边会是[56,12,89] ]

这是我现在的代码; 我应该在if语句中写什么条件?('l'是函数参数中传递的列表的名称)

    list<int> left, right;
    int midpt = l.size()/2;
    for(listIt = l.begin(); listIt!= l.end(); listIt++){
       if () left.push_back(*listIt);
       if () right.push_back(*listIt);
    }
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 6

这可能更容易:

#include <iterator>
#include <list>

auto middle = std::next(l.begin(), l.size() / 2);

std::list<int> left(l.begin(), middle), right(middle, l.end());
Run Code Online (Sandbox Code Playgroud)

这构造了两个新列表,left并且right直接来自相应的范围.该std::next算法返回一个迭代器,该迭代器是通过给定的迭代器按给定的步数推进得到的.注意,std::list<int>::size()从C++ 11开始,它具有恒定的运行时复杂性,尽管迭代迭代器需要花费大量的工作量.