find汎用アルゴリズム

2587 ワード

stlを勉强してしばらく时间があって、いつも何かを书きたいと思って、メモを取って、それから葛藤し始めましたallocatorを先に书いて、vectorはやはり别で、最后に柿が先に柔らかいつまみを选ぶことを决めて、アルゴリズムから始めましょう、これは私の第1作で、ほほほ.
比較的簡単なfindアルゴリズムで、先音明は容器内部のアルゴリズムではなく、汎用アルゴリズムです~~
ここでまず<>この本に敬意を表します!
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
華麗な分割線
find()アルゴリズムの用途は主にループ検索である
//find.h
template <class Iterator, class T>
Iterator find(Iterator begin, Iterator end, const T &value) {
	while(begin != end && *begin != value) {
		++begin;
	}
	return begin;
}

テストプログラム
//main.cpp
#include <iostream>
#include "find.h"
//#include <algorithm>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <string>
#include <utility>

using namespace std;

int main(void) {
	int a[5] = {0, 1, 2, 3, 4};
	vector<int> ivec(a, a+5);
	list<int> ilis(a, a+5);
	set<int> iset(a, a+5 );
	map<int, string> imap;
	imap[0] = "jiang";
	imap[1] = "ya";
	imap[2] = "feng";
	imap[3] = "a";
	imap[4] = "hero";

	int *p = find(a, a+5, 3);
	cout << *p << endl;									//3
	vector<int>::iterator iter1 = find(ivec.begin(), ivec.end(), 3);
	cout << *iter1 << endl;								//3
	list<int>::iterator iter2 = find(ilis.begin(), ilis.end(), 3);
	cout << *iter2 << endl;								//3
	set<int>::iterator iter3 = find(iset.begin(), iset.end(), 3);
	cout << *iter3 << endl;								//3
	/*map<int, string>::iterator iter4 = find(imap.begin(), imap.end(), make_pair(3, string("a")));*/	//error

	map<int, string>::iterator iter4 = find(imap.begin(), imap.end(), pair<const int, string>(3, string("a")));
	cout << (*iter4).second << endl;						// a

	system("pause");
	return 0;
}

mapでテストするときにまだエピソードがあります.
map<int, string>::iterator iter4 = find(imap.begin(), imap.end(), make_pair(3, string("a")))
はmake_pair(3,string(「a」)はpairを生成し、mapではpairタイプなので比較できません!
だから使うのは
map<int, string>::iterator iter4 = find(imap.begin(), imap.end(), pair<const int, string>(3, string("a")));