template参数推导,智能推到参数的类型,不能推导返回值。
原生指针也是一种迭代器,支持* ,->,++等操作
stl中的sort方式,只对能够randomaccess的迭代子。对于list slist这样的迭代子的排序方法,是单独提供的。
对于list,简单的想法就是通过不断merge操作,实现排序,保证效率,则每次merger的list大小尽量相等。
所以伪代码:
sort() {
list ladder[64];
list floor;
int top_ladder = 0;
while (!empty()) {
floor.splice(floor.begin(), this, begin()) //获取一个元素到floor中
//开始merge历程
int i=0;
while(i < top_ladder&& !ladder[i].empty()) {
floor.merge(ladder[i]);
i++;
}
floor.swap(ladder[i]);
if(i==top_ladder)topladder++;
}
for (i=0;i<top_ladder-2;i++){
ladder[i+1].merge(ladder[i])
}
}
这个算法的思想,就是“滚雪球”, 每个ladder上能够放2^n大小的雪球,每次从floor往上滚,“滚”其实就是merge,当滚不了了(下一个ladder为空),就不滚了。
这样,最后,将各个ladder上雪球,无条件滚到最后,就是最后的结果了。