我是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)
这可能更容易:
#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开始,它具有恒定的运行时复杂性,尽管迭代迭代器需要花费大量的工作量.
| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |