C++ Algorithm merge()

2024年8月30日 | 阅读4分钟

C++算法merge()函数用于将两个已排序的范围[first1, last1)和[first2, last2)合并为一个从result开始的已排序范围。

对于第一个版本,使用运算符 < 比较元素,或者对于第二个版本,使用给定的二元比较函数 comp 比较元素。

语法

参数

first1:一个输入迭代器,指向第一个已排序源序列中要合并的第一个元素。

last:一个输入迭代器,指向第一个已排序源序列中要合并的最后一个元素之后的位置。

first2:一个输入迭代器,指向第二个已排序源序列中要合并的第一个元素。

last2:一个输入迭代器,指向第二个已排序源序列中要合并的最后一个元素之后的位置。

comp:一个用户定义的二元谓词函数,接受两个参数,如果这两个参数有序则返回true,否则返回false。它遵循严格的弱排序来对元素进行排序。

val: 用于比较范围内元素的上界值。

result:一个输出迭代器,指向目标范围中的第一个元素,两个源范围将合并成一个单一的已排序范围。

返回值

它返回一个迭代器,指向结果序列中最后一个元素之后的位置。

复杂度

复杂度是线性的:最多执行(last1-first1) + (last2 - first2)次比较并赋值所有元素。

数据竞争

访问范围[first1, last1)和[first2, last2)中的对象。

result和返回值之间的范围内的对象将被更改。

异常

如果元素比较或迭代器操作抛出异常,此函数会抛出异常。

请注意,无效参数会导致未定义行为。

示例 1

让我们看一个简单的例子来演示merge()的使用

输出

Vector v1 :  1 2 4 5 6
Vector v2 :  10 20 30 40 50
Vector v3 :  1 2 4 5 6 10 20 30 40 50

示例 2

让我们看另一个简单的例子,使用运算符<实现merge()函数

输出

The container after merging initial containers is: 1 2 3 4 6 10 20 50 60 70

示例 3

让我们看另一个简单的例子,使用比较函数演示merge()

输出

The container after reverse merging initial containers is : 70 60 50 20 10 6 4 3 2 1

示例 4

让我们看另一个简单的例子

输出

The original 1st stack: 50 20 10 100 200 
The original 2nd stack: 500 2000 5000 1000 10000 
The resultant stack of notes is: 10 20 50 100 200 500 1000 2000 5000 10000 

下一主题C++ 算法