当前位置: 首页 > news >正文

影视会员代理平台网站个人免费注册公司网站

影视会员代理平台网站,个人免费注册公司网站,建设租车网站,稿定设计官网首页看到《C标准库第2版》对list::merge()的相关介绍,令我有点迷糊,特意敲代码验了一下不同情况的调用结果。 《C标准库第2版》对list::merge()的相关介绍 list::merge()定义 merge()的作用就是将两个list合并在一起,函数有2个版本:…

看到《C++标准库第2版》对list::merge()的相关介绍,令我有点迷糊,特意敲代码验了一下不同情况的调用结果。

《C++标准库第2版》对list::merge()的相关介绍

list::merge()定义

merge()的作用就是将两个list合并在一起,函数有2个版本:

  • c1.merge(c2)------------->这个版本含糊,将c2合入c1中,但合并后元素是怎么排序的呢?下文主要分析这个版本的不同调用结果
  • c1.merge(c2, op)--------->这个版本比较简单,就是将c2的内容合入到c1中,然后按op()排序

c1.merge(c2)调用情况分析

  • 前提:有两个list,内容分别如下:

  • 情况一:c1默认排序,c2不排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };list<int> c2{ 10,11,99,13,14,15 };cout << "-----------原始数据-----------" << endl;myPrinter(c1, c2);cout << "-----------排序后数据-----------" << endl;c1.sort(); //默认升序排序myPrinter(c1, c2);cout << "-----------合并后数据-----------" << endl;c1.merge(c2);myPrinter(c1, c2);

结果:合并后没有按c1的默认升序排序

  • 情况二:c1不排序,c2默认排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };list<int> c2{ 10,11,99,13,14,15 };cout << "-----------原始数据-----------" << endl;myPrinter(c1, c2);cout << "-----------排序后数据-----------" << endl;c2.sort(); //默认升序排序myPrinter(c1, c2);cout << "-----------合并后数据-----------" << endl;c1.merge(c2);myPrinter(c1, c2);

结果:合并后没有按c2的默认升序排序

  • 情况三:c1默认排序,c2默认排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };list<int> c2{ 10,11,99,13,14,15 };cout << "-----------原始数据-----------" << endl;myPrinter(c1, c2);cout << "-----------排序后数据-----------" << endl;c1.sort(); //默认升序排序c2.sort(); //默认升序排序myPrinter(c1, c2);cout << "-----------合并后数据-----------" << endl;c1.merge(c2);myPrinter(c1, c2);

结果:合并后也能按默认升序排序

  • 情况四:c1默认排序,将c1赋值给c2,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };list<int> c2{ 10,11,99,13,14,15 };cout << "-----------原始数据-----------" << endl;myPrinter(c1, c2);cout << "-----------排序后数据-----------" << endl;c1.sort(); //默认升序排序c2 = c1;myPrinter(c1, c2);cout << "-----------合并后数据-----------" << endl;c1.merge(c2);myPrinter(c1, c2);

结果:可以看到,c1赋值给c2,使得c2也具有了与c1一样的默认排序,两者合并后,仍能按默认升序排序,结果与情况三结果相似。


下面使用自定义的降序规则(op())来排序

    //降序比较auto op = [](int first, int second) {return first > second;};

情况五:c1自定义降序排序,c2不排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };list<int> c2{ 10,11,99,13,14,15 };cout << "-----------原始数据-----------" << endl;myPrinter(c1, c2);cout << "-----------排序后数据-----------" << endl;c1.sort(op);myPrinter(c1, c2);cout << "-----------合并后数据-----------" << endl;c1.merge(c2);myPrinter(c1, c2);

结果:合并后没有按c1的自定义降序排序,与情况一相似

情况六:c1不排序,c2自定义降序排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };list<int> c2{ 10,11,99,13,14,15 };cout << "-----------原始数据-----------" << endl;myPrinter(c1, c2);cout << "-----------排序后数据-----------" << endl;c2.sort(op);myPrinter(c1, c2);cout << "-----------合并后数据-----------" << endl;c1.merge(c2);myPrinter(c1, c2);

结果:合并后没有按c2的自定义降序排序,与情况二相似

情况七:c1自定义降序排序,c2自定义降序排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };list<int> c2{ 10,11,99,13,14,15 };cout << "-----------原始数据-----------" << endl;myPrinter(c1, c2);cout << "-----------排序后数据-----------" << endl;c1.sort(op);c2.sort(op);myPrinter(c1, c2);cout << "-----------合并后数据-----------" << endl;c1.merge(c2);myPrinter(c1, c2);

结果:合并后,其结果仅仅是将c2放到了c1的末端,c1段、c2段数据仍是合并前的顺序,这与情况三有差异

 情况八:c1自定义降序排序,c2默认排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };list<int> c2{ 10,11,99,13,14,15 };cout << "-----------原始数据-----------" << endl;myPrinter(c1, c2);cout << "-----------排序后数据-----------" << endl;c1.sort(op);c2.sort();myPrinter(c1, c2);cout << "-----------合并后数据-----------" << endl;c1.merge(c2);myPrinter(c1, c2);

结果:合并后,没有按c1的自定义降序排序,也没有按c2的默认排序,与情况二相似

情况九:c1自定义降序排序,将c1赋值给c2,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };list<int> c2{ 10,11,99,13,14,15 };cout << "-----------原始数据-----------" << endl;myPrinter(c1, c2);cout << "-----------排序后数据-----------" << endl;c1.sort(op);c2 = c1;myPrinter(c1, c2);cout << "-----------合并后数据-----------" << endl;c1.merge(c2);myPrinter(c1, c2);

 

结果:合并后,其结果仅仅是将c2放到了c1的末端,c1段、c2段数据仍是合并前的顺序,这与情况七相同,但与情况三有差异

结论

因为合并后的顺序情况多变,所以如果希望合并后结果按某种规则排序,建议使用c1.merge(c2, op),指明合并后的排序规则。

当然,如果c1,c2都是默认排序,则可以直接使用c1.merge(c2),即上文提到的情况三。

附:示例的辅助函数

template <class T>
void printfList(const T& _Container, const char* _Delim)
{std::copy(_Container.cbegin(), _Container.cend(), std::ostream_iterator<T::value_type>(cout, _Delim));cout << endl;
}void myPrinter(const list<int>& c1, const list<int>& c2)
{cout << "c1:";printfList(c1, " ");cout << "c2:";printfList(c2, " ");cout << "----------------------" << endl << endl;
}

http://www.yayakq.cn/news/317973/

相关文章:

  • 网站开发 jz.woonl杭州搭建网站
  • 购物网站模板免费下载做网站选什么专业
  • 中国建设网官方网站公司网站制作范文
  • 建网站建网站的公司网站开发岗位内容和要求
  • 高端网站开发哪家好谷歌网站优化工具
  • 标识设计网站手表网站有哪个比较好
  • 眼镜网站怎么做科技公司网站模板
  • 巴南网站建设wordpress挂马
  • 烂网站做竞价行吗找网站公司制作网站
  • 盐城做网站价格网站搜索功能怎么实现
  • 厦门响应式网站建设网站的心得体会
  • 外链推广网站都有哪些糕点网站设计
  • 烟台开发区住房和建设局网站沈阳营销型网站开发
  • 不动产登记网站建设什么是网站链接优化
  • 昆明网站建设frf延边网站开发depawo
  • 江夏网站建设网站推广模式
  • 东莞服装网站建设dw自我介绍网页制作步骤
  • 河南企业网站排名优化价格合肥网站建设渠道
  • 建设mylove卡网站wordpress判断手机电脑
  • 做网站放哪个科目网站是怎么做
  • 海南城乡建设厅网站模块化网站建设 局域网
  • 白名单网站有哪些聊城网站建设的地方
  • 思淘网站建设wordpress能做跨境电商
  • 宁波做网站烟台厂商网站怎样做移动端
  • 网站备案系统登录办公室装修设计app
  • 电商网站建设与运营专业网页无法打开
  • 东坑网站建设手机网站用什么制作
  • 廊坊网站建设解决方案做网站要准备的需求
  • 虚拟主机可以做视频视频网站吗怎么做网站代理商
  • 网站开发市场现在怎么样企业展厅设计装修