Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

forward_list::merge

公众成员函数  <forward_list>
(1)
  void merge (forward_list& fwdlst);
  void merge (forward_list&& fwdlst);
2)
template <class Compare>
  void merge (forward_list& fwdlst, Compare comp);
template <class Compare>
  void merge (forward_list&& fwdlst, Compare comp);

合并已排序的容器

将fwdlst合并到 *this中,方法是将fwdlst在其各自有序位置的所有元素转移到*this容器中(两个容器都应该已经有序)。

这将删除fwdlst中的所有元素(变为空元素),并将它们插入到*this容器中的有序位置 (容器的大小会随着转移的元素数量而扩大)。该操作在不构造或销毁任何元素的情况下执行: 不管fwdlst是左值还是右值,也不管value_type是否支持move-construction,都将转移元素。

带有两个形参(2)的模板版本具有相同的行为,但采用一个特定的谓词(comp)来执行元素之间的比较操作。 这种比较将产生元素的严格弱排序(即,不考虑自反性的一致可传递比较)。

这个函数要求forward_list容器在调用之前已经按照值(或comp)排序了它们的元素。 有关无序列表的替代方法,请参见list::splice。

容器保留它当前的分配器,除非分配器特征表明fwdlst的分配器应该传递。 这个分配器(通过它的特性)用于在存储需求发生变化时进行分配或释放,以及在需要时构造或销毁元素。

fwdlst的每个元素都会根据operator<或comp定义的严格弱顺序插入到与其值对应的位置。 相等元素的结果顺序是明确的(即,相等元素保持它们在调用之前的相对顺序,现有元素在从fwdlst插入的相等元素之前)。

☲  参数


fwdlst
使用相同分配器的相同类型的forward_list对象(即,具有相同的模板参数,T和Alloc)。 注意,无论传递的是左值还是右值引用,这个函数都会修改fwdlst。
comp
二元谓词,接受与forward_list中包含的值相同类型的两个值..
如果第一个参数按照它定义的严格弱顺序被认为在第二个参数之前, 则返回true,否则返回false。
这应该是一个函数指针或函数对象。

☉  返回值



none

☣  示例



// forward_list::merge
#include <iostream>
#include <forward_list>
#include <functional>

int main ()
{
  std::forward_list<double> first = {4.2, 2.9, 3.1};
  std::forward_list<double> second = {1.4, 7.7, 3.1};
  std::forward_list<double> third = {6.2, 3.7, 7.1};

  first.sort();
  second.sort();
  first.merge(second);

  std::cout << "first contains:";
  for (double& x: first) std::cout << " " << x;
  std::cout << std::endl;

  first.sort (std::greater<double>());
  third.sort (std::greater<double>());
  first.merge (third, std::greater<double>());

  std::cout << "first contains:";
  for (double& x: first) std::cout << " " << x;
  std::cout << std::endl;

  return 0;
}


输出:
first contains: 1.4 2.9 3.1 3.1 4.2 7.7
first contains: 7.7 7.1 6.2 4.2 3.7 3.1 3.1 2.9 1.4

✥ 复杂度



两个容器的大小之和最多是线性的(比较)。

☣ 迭代器的有效性



在调用之前,与容器相关的迭代器、指针和引用没有变化。
指向已转移元素的迭代器、指针和引用继续指向相同的元素,但迭代器现在将迭代到已转移元素所在的容器中。

⇄ 数据竞争


*this容器和fwdlst都被修改.
并发访问或修改它们的元素是安全的,尽管遍历任何一个容器都不安全。

☂ 异常安全性



如果两个容器中的分配器不相等,如果comp没有定义严格的弱排序, 或者容器元素没有按照它排序,则会导致未定义的行为。
否则,如果比较引发异常,则容器将保持有效状态(基本保证)。
否则,如果抛出异常,则容器中没有任何更改(强保证)。

🍄  另请参阅



forward_list::splice_after 从另一个forward_list转移元素(公众成员函数)
forward_list::insert_after 插入元素(公众成员函数)
forward_list::remove 删除具有特定值的元素(公众成员函数)
forward_list::erase_after 删除元素(公众成员函数)
forward_list::push_front 在开头插入元素(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图