STL 之adjacent_find, merge,inplace_merge

返回


adjacent_find: 查找符合某一准测的连续元素的首次出现

merge:合并有序列表,结果仍是一个有序列表

inplace_merge:合并有序连续序列


声明:

#include <algorithm>
template<class forwardItr>
forwardItr adjacent_find(forwardItr first, forwardItr last);
template<class forwardItr, class binaryPredicate>
forwardItr adjacent_find(forwardItr first, forwardItr last, binaryPredicate op);

template<class inputItr1,class inputItr2,class outputItr, class binaryPredicate>
outputItr merge(inputItr1 first1,inputItr1 last1, inputItr2 first2, inputItr2 last2,outputItr destFirst);
template<class inputItr1,class inputItr2,class outputItr>
outputItr merge(inputItr1 first1,inputItr1 last1, inputItr2 first2, inputItr2 last2,outputItr destFirst, binaryPredicate op);

template<class biDirectionalItr>
void inplace_merge(biDirectionalItr first, biDirectionalItr middle, biDirectionalItr last);
template<class biDirectionalItr, class binaryPredicate>
void inplace_merge(biDirectionalItr first, biDirectionalItr middle, biDirectionalItr last, binaryPredicate op);

示例代码:

#include <iostream>
#include <list>

#include <string>
#include <numeric>
#include <iterator>
#include <vector>
#include <functional>

#include <algorithm>

using namespace std;

int main() {
	int list1[10] = {1,3,5,7,9,0,2,4,6,8};
	int list2[10] = {0,1,1,2,3,4,4,5,6,6};
	int list3[5] = {0,2,4,6,8};
	int list4[5] = {1,3,5,7,9};

	list<int> intList(list2,list2+10);
	list<int>::iterator listItr;

	vector<int> vecList(list1,list1+10);
	vector<int>::iterator vecItr;

	ostream_iterator<int> srceen(cout , " ");
	cout << "intList:" << endl;
	copy(intList.begin(),intList.end(),srceen);
	cout << endl;

	// 查找相邻元素,是否存在相同的值
	listItr = adjacent_find(intList.begin(),intList.end());
	if (listItr != intList.end())
	{
		cout << "ajacent equal elements are found" << endl;
		cout << "value:" << *listItr << endl;
	} else {
		cout << "No adjacent equal element" << endl;
	}

	intList.clear();
	
	// 合并
	merge(list3,list3 + 5,list4,list4 + 5, back_inserter(intList));
	cout << "merge list3 and list4" << endl;
	copy(intList.begin(),intList.end(),srceen);
	cout << endl;

	// adjacent_find
	vecItr = adjacent_find(vecList.begin(),vecList.end(),greater<int>());
	cout << ">\n" <<  *vecItr << endl;
	vecItr++;
	cout << *vecItr << endl;
	cout << "vecList:" << endl;
	copy(vecList.begin(),vecList.end(),srceen);
	cout << endl;

	// inplace_merge
	inplace_merge(vecList.begin(),vecItr,vecList.end());
	cout << "vecList:" << endl;
	copy(vecList.begin(),vecList.end(),srceen);
	cout << endl;
	return 0;
}

运行结果:

intList:
0 1 1 2 3 4 4 5 6 6
ajacent equal elements are found
value:1
merge list3 and list4
0 1 2 3 4 5 6 7 8 9
>
9
0
vecList:
1 3 5 7 9 0 2 4 6 8
vecList:
0 1 2 3 4 5 6 7 8 9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值