首页 > 编程语言 >C++ merge()函数

C++ merge()函数

时间:2023-11-19 21:48:27浏览次数:30  
标签:myvector 函数 C++ merge second 有序 序列 first

merge() 函数用于将 2 个有序序列合并为 1 个有序序列,前提是这 2 个有序序列的排序规则相同(要么都是升序,要么都是降序)。并且最终借助该函数获得的新有序序列,其排序规则也和这 2 个有序序列相同。

merge() 函数支持自定义规则排序,merge() 有两种语法格式

//以默认的升序排序作为排序规则
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
                      InputIterator2 first2, InputIterator2 last2,
                      OutputIterator result);
//以自定义的 comp 规则作为排序规则
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
                      InputIterator2 first2, InputIterator2 last2,
                      OutputIterator result, Compare comp);
  • first1last1first2last2,为输入迭代器,来指定两个有序序列,result 为输出迭代器,用于为最终生成的有序序列指定存储位置,comp 用于自定义排序规则。该函数会返回一个输出迭代器,其指向的是新有序序列中最后一个元素之后的位置。

注意,当采用第一种语法格式时,\([first1, last1)\) 和 \([first2, last2)\) 指定区域内的元素必须支持 \(<\) 小于运算符;同样当采用第二种语法格式时,\([first1, last1)\) 和 \([first2, last2)\) 指定区域内的元素必须支持 \(comp\) 排序规则内的比较运算符。

例如:

#include <iostream>     // std::cout
#include <algorithm>    // std::merge
#include <vector>       // std::vector
using namespace std;
int main() {
    //first 和 second 数组中各存有 1 个有序序列
    int first[] = { 5,10,15,20,25 };
    int second[] = { 7,17,27,37,47,57 };
    //用于存储新的有序序列
    vector<int> myvector(11);
    //将 [first,first+5) 和 [second,second+6) 合并为 1 个有序序列,并存储到 myvector 容器中。
    merge(first, first + 5, second, second + 6, myvector.begin());
    //输出 myvector 容器中存储的元素
    for (vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it) {
        cout << *it << ' ';
    }   
    return 0;
}

程序运行的结果为:5 7 10 15 17 20 25 27 37 47 57

可以看到,first 数组和 second 数组中各存有 1 个升序序列,通过借助 merge() 函数,我们成功地将它们合并成了一个有序序列,并存储到 myvector 容器中。

注意,merge() 函数底层是通过拷贝的方式实现合并操作的。换句话说,上面程序在采用 merge() 函数实现合并操作的同时,并不会对 first 和 second 数组有任何影响。

标签:myvector,函数,C++,merge,second,有序,序列,first
From: https://www.cnblogs.com/martian148/p/17842719.html

相关文章

  • DX后台截图C++实现代码
    DX后台截图C++实现代码文章仅发布于https://www.cnblogs.com/Icys/p/DXGI.html和知乎上。传统的GDIAPI(BitBlt)虽然可以完美的完成后台截图的任务,但是归根结底效率还是太低。直接使用DXGI方法截图只能完成前台窗口的截图,而DXHOOK的截图方法平添风险,以及很多场景不现实。......
  • 8.1 Windows驱动开发:内核文件读写系列函数
    在应用层下的文件操作只需要调用微软应用层下的API函数及C库标准函数即可,而如果在内核中读写文件则应用层的API显然是无法被使用的,内核层需要使用内核专有API,某些应用层下的API只需要增加Zw开头即可在内核中使用,例如本章要讲解的文件与目录操作相关函数,多数ARK反内核工具都具有对......
  • signal - 注册信号处理函数
    Unix系统提供了signal和sigaction两种改变信号处理函数的方法。signal是设置信号处理函数的原始API,比sigaction简单且功能少。signal()无法在不改变信号处理函数的同时,还能获得当前的信号处理函数,但sigaction()可以signal在UNIX实现间存在差异,对可移植性有要求的程序不能使......
  • 实用"函数式"编程范式
    实用"函数式"编程范式通常说函数式编程,可能就会提到map/reduce,或者函数编程语言,例如lisp,Haskell等。我以前读过一篇文章,具体链接找不到了,作者的观点是函数式编程具体体现在通过函数编程可以直观得看到逻辑调用链条之间的关系。例如下面这段代码:p=a( b, c, d, e......
  • C++AVL树和红黑树的模拟实现
    前言在二叉树的基础上,为了让搜索更加快捷,出现的二叉搜索树,二叉搜索树规定,二叉树的左子树的值一定都小于其父亲节点的值,所有右子树的值一定都大于其父亲节点的值,这样就保证了在查找某一个数据时,让时间复杂度最低为变为logn。一、二叉树两种特殊的二叉树1.满二叉树满二叉树每层的节......
  • Linux驱动开发 驱动程序的具体编写及出口入口函数解析,printk打印内核信息
    (文章目录)前言本文将带大家学习驱动程序的具体编写及出口入口函数解析。一、出口函数入口函数解析每一个驱动程序都是含有出口函数和入口函数的,装载驱动的时候先调用入口函数,卸载驱动的时候则调用出口函数。入口出口函数的形式如下:static__initinthello_dev_init(void)......
  • 函数(4)本地变量(局部变量)及函数细节补充
    <1>本地变量(1)本地变量的定义函数每一次运行都会产生一个独立的变量空间,在这个变量空间中的变量是函数此次运行中独有的变量,称为本地变量;定义在函数内部的变量就是本地变量;参数也是本地变量;(2)变量的生存期和作用域生存期:从变量开始出现到变量消亡的时间;作用域:在代码的......
  • 2023-11-19 无法将“gradle”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。(wi
    系统环境:windows出现该提示,一般情况下都是因为你没有把你安装的gradle包路径放到系统变量如果你没有安装gradle,可以前往gradle官网下载:https://gradle.org/install如果你已经安装了gradle,那下面就是把gradle包路径放到系统变量的教程: 系统变量==》Path==》新建 输入gradl......
  • 如何使用Matplotlib模块的text()函数给柱形图添加美丽的标签数据?
    (如何使用Matplotlib模块的text函数给柱形图添加美丽的标签数据?)1简单引入在进行数据分析时,当一些图表数据,比如柱形图我们想让它更直观的显示一些内容,有时候会给柱形图添加标签,那如何实现这样的效果呢?还有比如我们把某手机品牌1-12月每月的销量制作成柱形图,那如何在柱形图上......
  • JAVA中的函数接口,你都用过吗
    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。在这篇文章中,我们将通过示例来学习Java函数式接口。函数式接口的特点只包含一个抽象方法的接口称为函数式接口。它可以有任意数量的默认静态方法,但只能包含一个抽象方法。它还可以声明对象类......