C++ - 标准库 "merge" 函数 的 用法及代码
标准库 "merge" 函数 的 用法及代码 merge() 是 C++ 标准库的函数, 主要实现函数的排序和合并, 不仅仅是合并, 具体要求参照标准库.网址:http://www.cplusplus.com/reference/algorithm/merge/?kw=merge如果是通用方法, 则第二个容器依然存在; 如果是链表方法, 则第二个容器被破坏, 存入第一个容器.
·
标准库 "merge" 函数 的 用法及代码
merge() 是 C++ 标准库的函数, 主要实现函数的排序和合并, 不仅仅是合并, 具体要求参照标准库.
网址: http://www.cplusplus.com/reference/algorithm/merge/?kw=merge
如果是通用方法, 则第二个容器依然存在; 如果是链表方法, 则第二个容器被破坏, 存入第一个容器.
输入的两个序列 必须 符合谓词的要求,默认谓词是 "<"; 也可以使用自定义谓词, 例如 ">" 的函数.
由于编译器无法检查输入容器是否符合要求(符合谓词), 所以必须需要程序提前判断, 否则出错.
下面代码包含了两种方法, 一种是默认谓词, 一种是自定义谓词, 注意 输入容器的顺序.
代码(VS2012)
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <array>
#include <list>
using namespace std;
bool comp(const int i, const int j){
return i>j;
}
int main(void) {
/*自定义谓词*/
std::array<int, 4> ai1 = {1, 3, 4, 5};
std::list<int> lsti1;
for(const auto& i : ai1)
lsti1.push_front(i); //从大到小
std::array<int, 4> ai2 = {2, 6, 7, 8};
std::list<int> lsti2;
for(const auto& i : ai2)
lsti2.push_front(i);
lsti1.merge(lsti2, comp);
std::cout << "merge(>) : ";
for(const auto& i : lsti1)
std::cout << i << " ";
std::cout << std::endl;
/*默认谓词*/
std::array<int, 4> ai1d = {1, 3, 4, 5};
std::list<int> lsti1d;
for(const auto& i : ai1d)
lsti1d.push_back(i); //从小到大
std::array<int, 4> ai2d = {2, 6, 7, 8};
std::list<int> lsti2d;
for(const auto& i : ai2d)
lsti2d.push_back(i);
lsti1d.merge(lsti2d);
std::cout << "merge(<) : ";
for(const auto& i : lsti1d)
std::cout << i << " ";
std::cout << std::endl;
return 0;
}
更多推荐
已为社区贡献7条内容
所有评论(0)