sgi stl源码学习

c++ stl 源码分析

list类之merge函数

template <class _Tp, class _Alloc>
void list<_Tp, _Alloc>::merge(list<_Tp, _Alloc>& __x)
{
  iterator __first1 = begin();
  iterator = end();
  iterator __first2 = __x.begin();
  iterator __last2 = __x.end();
  while (__first1 != __last1 && __first2 != __last2)
    if (*__first2 < *__first1) {
      iterator __next = __first2;
      transfer(__first1, __first2, ++__next);
      __first2 = __next;
    }
    else
      ++__first1;
  if (__first2 != __last2) transfer(__last1, __first2, __last2);
}

c++ stl源码基于泛型编程, 模板参数_Tp _Alloc分别代表操作的数据类型和为数据分配内存的操作类,merge的前提是两个list都已经经过递增排序,此函数通过在list1(this)本身上的iterator进行插入操作, transfer函数的第一个参数表示插入位置为该参数的前一个位置, 第二个与第三个参数表示将被插入数据的起始位置 与终结位置(不包含), 先将list2内置的开始迭代器__first2的存值与list1内置的开始迭代器__first1的存值比较, 如果*__first2 < __first1 , 就将__first2就代表的迭代器插入到__first1的前面, __first2指向下一个位置 , 再与__firs1做比较, 如果*__first2 >= *__first1, ++__first1 first1指向下一个迭代器,循环的结束条件是_first1 != __last1 && __first2 != __last2, 只要list1或者list2有一个的迭代器有一个到达结尾就停止循环, 假如是list1的全部已经迭代完, list2未完成迭代, 则将list2迭代剩下部分插入__last1 的前面

感言

既然选择了做程序猿, 为了职业生涯, 必须得不断学习提升自己挑战自己, 彩虹总在风雨后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值