STL算法------查找3

1.search()

2.find_end()


注意:

          这两个算法是一对

          第二个算法应该叫search_end(),但被命名为find_end()


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

using namespace std;

bool CheckEven( int elem, bool even )
{
	if(even)
		return elem%2==0;
	else
		return elem%2==1;
}

int main( int argc, char** argv )
{
	vector<int> vec;
	list<int> lst;

	for( int i=0; i<9; ++i )
	{
		vec.insert(vec.end(), i );
	}
	for( int i=0; i<9; ++i )
	{
		vec.insert(vec.end(), i );
	}
	for( int i=3; i<7; ++i )
	{
		lst.insert(lst.end(), i );
	}

	for(vector<int>::const_iterator citr=vec.begin(); citr!=vec.end(); ++citr)
	{
		cout<<*citr<<' ';
	}
	cout<<endl;
	for(list<int>::const_iterator citr=lst.begin(); citr!=lst.end(); ++citr)
	{
		cout<<*citr<<' ';
	}
	cout<<endl;

	//search
	vector<int>::iterator pos;
	pos = search( vec.begin(), vec.end(), lst.begin(), lst.end() );
	while( pos != vec.end() )
	{
		cout<<"find "<<distance(vec.begin(), pos)+1<<endl;
		++pos;
		pos = search( pos, vec.end(), lst.begin(), lst.end() );
	}

	//find_end
	cout<<"use find_end"<<endl;
	pos = find_end(vec.begin(), vec.end(), lst.begin(), lst.end() );
	if( pos != vec.end() ){
		cout<<"find "<<distance(vec.begin(), pos)+1<<endl;
	}else{
		cout<<"not find"<<endl;
	}

	//search_if
	bool bEven[3] = {false, true, false};
	pos = search(vec.begin(), vec.end(), bEven, bEven+3, CheckEven );
	if( pos != vec.end() )
	{
		cout<<"find  "<<distance(vec.begin(), pos)+1<<endl;
	}else{
		cout<<"not find"<<endl;
	}

	return 0;
}


posted @ 2015-03-04 12:34  SandKing  阅读(6)  评论(0)    收藏  举报  来源