簡單的程序詮釋C++ STL算法系列之四:adjacent_find

       C++STL的非變易算法(Non-mutating algorithms)是一組不破壞操作數據的模板函數,用來對序列數據進行逐個處理、元素查找、子序列搜索、統計和匹配。

      adjacent_find算法用於查找相等或滿足條件的鄰近元素對。其有兩種函數原型:一種在迭代器區間[first , last)上查找兩個連續的元素相等時,返回元素對中第一個元素的迭代器位置。另一種是使用二元謂詞判斷binary_pred,查找迭代器區間[first , last)上滿足binary_pred條件的鄰近元素對,未找到則返回last。

      函數原型:

template<class ForwardIterator>
   ForwardIterator adjacent_find(
      ForwardIterator _First, 
      ForwardIterator _Last
      );
template<class ForwardIterator , class BinaryPredicate>
   ForwardIterator adjacent_find(
      ForwardIterator _First, 
      ForwardIterator _Last, 
            BinaryPredicate _Comp
   );

    示例代碼:

/*******************************************************************
 * Copyright (C) Jerry Jiang
             
 * File Name   : adjacent_find.cpp
 * Author      : Jerry Jiang
 * Create Time : 2011-9-30 22:07:22
 * Mail        : [email protected]
 * Blog        : http://blog.csdn.net/jerryjbiao               
 * Description :  簡單的程序詮釋C++ STL算法系列之四              
 *                非變易算法 : 鄰近查找容器元素adjacent_find              
 ******************************************************************/

#include <algorithm>
#include <list>
#include <iostream>

using namespace std;

//判斷X和y是否奇偶同性
bool parity_equal(int x, int y)
{
	return (x - y) % 2 == 0 ? 1 : 0;
}

int main()
{
	//初始化鏈表
	list<int> iList;
	iList.push_back(3);
	iList.push_back(6);
	iList.push_back(9);
	iList.push_back(11);
	iList.push_back(11);
	iList.push_back(18);
	iList.push_back(20);
	iList.push_back(20);

	//輸出鏈表
	list<int>::iterator iter;
	for(iter = iList.begin(); iter != iList.end(); ++iter)
	{
		cout << *iter << "  ";
	}
	cout << endl;
	
	//查找鄰接相等的元素
	list<int>::iterator iResult = adjacent_find(iList.begin(), iList.end());
	if (iResult != iList.end())
	{
		cout << "鏈表中第一對相等的鄰近元素爲:" << endl;
		cout << *iResult++ << endl;
		cout << *iResult << endl;
	}

	//查找奇偶性相同的鄰近元素
	iResult = adjacent_find(iList.begin(), iList.end(), parity_equal);
	if (iResult != iList.end())
	{
		cout << "鏈表中第一對奇偶相同的元素爲:" << endl;
		cout << *iResult++ << endl;
		cout << *iResult << endl;
	}
	return 0;
}

*******************************************************************************************************************************

C++經典書目索引及資源下載:http://blog.csdn.net/jerryjbiao/article/details/7358796

********************************************************************************************************************************



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章