stl源码学习

来源:互联网 发布:冰淇淋挖球器 知乎 编辑:程序博客网 时间:2024/04/27 22:42

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上雪球,无条件滚到最后,就是最后的结果了。

0 0
原创粉丝点击