cb30a_c++_STL_算法_查找算法_(3)search_find_end

cb30a_c++_STL_算法_查找算法_(3)search_find_end
search()
pos = search(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());
find_end(),从后面开始找

注意:
这两个算法是一对
第二个算法应该叫search_end(),但是被命名为find_end()

pos2 = search(ivec.begin(), ivec.end(),checkEvenArgs,checkEvenArgs+3, checkEven);
        //ivec.begin(), ivec.end()传给第一个参数,elem.
        //,checkEvenArgs,checkEvenArgs+3,传给checkEven的第二个参数,even
        //bool checkEven(int elem, bool even)//二元谓词,两个return

/*cb30a_c++_STL_算法_查找算法_(3)search_find_end
search()
pos = search(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());
find_end(),从后面开始找

注意:
这两个算法是一对
第二个算法应该叫search_end(),但是被命名为find_end()

pos2 = search(ivec.begin(), ivec.end(),checkEvenArgs,checkEvenArgs+3, checkEven);
		//ivec.begin(), ivec.end()传给第一个参数,elem.
		//,checkEvenArgs,checkEvenArgs+3,传给checkEven的第二个参数,even
		//bool checkEven(int elem, bool even)//二元谓词,两个return
*/
#include <iostream>
#include <algorithm>
#include <deque>
#include <list>
#include <vector>

using namespace std;

//1,2,2,4,5
//true, false, true
//false表示奇数
//true 偶数

bool checkEven(int elem, bool even)//二元谓词,两个return
{
	if (even)
		return elem % 2 == 0;// 
	else
		return elem % 2 == 1;//
}
//把 true, false, true,三个传进去,连续3个都返回true,说明查找到了。

int main()
{
	deque<int> ideq;
	list<int> ilist;
	for (int i = 1; i <= 7; ++i)
		ideq.insert(ideq.end(), i);//插入到最后
	for (int i = 1; i <= 7; ++i)
		ideq.insert(ideq.end(), i);//插入到最后
	for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); ++iter)
		cout << *iter << ' ';
	cout << endl;
	for (int i = 3; i <= 6; ++i)
		ilist.insert(ilist.end(), i);
	for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
		cout << *iter << ' ';
	cout << endl;

	deque<int>::iterator pos;
	pos = search(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());
		cout << "在ideq容器里面找ilist" << endl;
		if (pos != ideq.end())
			cout << "找到了位置:" << distance(ideq.begin(), pos)+1 << endl;
		else
			cout << "没找到" << endl;
		++pos;
		pos = search(pos, ideq.end(), ilist.begin(), ilist.end());
		cout << "在ideq容器里面找ilist" << endl;
		if (pos != ideq.end())
			cout << "找到了位置:" << distance(ideq.begin(), pos)+1 << endl;
		else
			cout << "没找到" << endl;

		cout << "使用find_end,从后面开始查找。进行查找:" << endl;
		pos = find_end(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());

		if (pos != ideq.end())
			cout << "找到了位置:" << distance(ideq.begin(), pos) + 1 << endl;
		else
			cout << "没找到" << endl;

		cout << "使用谓词查找" << endl;

		vector<int> ivec;
		bool checkEvenArgs[3] = {true,false,true};
		for (int i = 1; i <= 9; ++i)
			ivec.push_back(i);
		for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
			cout << *iter << ' ';
		cout << endl;
		vector<int>::iterator pos2;
		pos2 = search(ivec.begin(), ivec.end(),checkEvenArgs,checkEvenArgs+3, checkEven);
		//ivec.begin(), ivec.end()传给第一个参数,elem.
		//,checkEvenArgs,checkEvenArgs+3,传给checkEven的第二个参数,even
		//bool checkEven(int elem, bool even)//二元谓词,两个return


		//1,2,3,4,5,6,7
		//true,false,true.   对应2,3,4。所以在第二就找到了。显示2
		if (pos2 != ivec.end())
			cout << "找到了,位置是:" << distance(ivec.begin(), pos2)+1 << endl;
		else
			cout << "没找到" << endl;
	return 0;
}
发布了469 篇原创文章 · 获赞 211 · 访问量 95万+

猜你喜欢

转载自blog.csdn.net/txwtech/article/details/104396619