栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

sgi stl源码学习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

sgi stl源码学习

c++ stl 源码分析 list类之merge函数
template 
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 的前面

感言

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004996.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号