【问题标题】:merging a list in C++在 C++ 中合并列表
【发布时间】:2021-08-03 08:18:18
【问题描述】:

我是 STL 概念的新手,在列表合并代码中遇到了问题。

list<int> lst1; 
list<int> lst2;
lst1.push_back(5);
lst1.push_back(7);
lst1.push_back(1);
lst1.push_back(9);
lst1.push_back(12);

lst2.push_back(45);
lst2.push_back(6);
lst2.push_back(9);

代码的输出:

lst1.merge(lst2) 

是 5 7 1 9 12 45 6 9

但是当我们分别对这两个列表进行排序时,我们会得到

lst1.sort()
lst2.sort()
lst1.merge(lst2)

作为输出排序的整个列表是 1 5 6 7 9 9 12 45

为什么没有输出 1 3 7 9 12 6 9 45 ?

我们正在单独对列表进行排序,为什么最终的列表会被排序?

【问题讨论】:

  • 你确定你的两个输出中有5?您的两个输入都没有(输入值为3)。并不是说它不会发生(滥用函数可能会做一些奇怪的事情),但您似乎更有可能打错了(特别是因为正确的用法显示相同的不存在 5)。
  • 是的,打错字了

标签: c++ list stl


【解决方案1】:

这就是为什么在猜测它的作用之前,您至少需要阅读the function's documentation摘要。字面意思是第一行:

将两个排序的列表合并为一个。列表应按升序排序。

函数的重点是将两个排序的输入合并为一个排序的结果。如果你违反了要求,就会发生奇怪的事情(很可能它假设输入是排序的,并以一种优先考虑局部最小值的方式将它们混在一起,产生一个未排序的输出,但不仅仅是背靠背节点)。

如果你只是想在末尾拼接另一个list的节点,那就是splice is for

【讨论】:

  • 永远不要低估文档的力量。
猜你喜欢
  • 2014-08-30
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
相关资源
最近更新 更多