c++ stl algorithm: std::find, std::find_if

原文地址:http://blog.csdn.net/ilysony/article/details/6526545

std::find: 查找容器元素, find只能查找容器元素为<基本数据类型>

#include <iostream>
#include <vector>
#include <algorithm>
int main() { std::vector<int> v; for (int i = 0; i < 10; ++i) v.push_back(i);
std::vector
<int>::iterator iter = std::find(v.begin(), v.end(), 3);
if (iter == v.end()) std::cout << "can not find value 3 in v" << std::endl; else std::cout << "the index of value " << (*iter) << " is "
<< std::distance(v.begin(), iter) << std::endl;
return 0; }

std::find_if: 按条件查找容器元素, 容器类型为<类>时, 无法使用find来查找, 所以要使用find_if来查找

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
struct Point { int x; int y; };
struct PointFindByCoord : public std::binary_function<Point, Point, bool> { bool operator () (const Point &obj1, const Point &obj2) const { return obj1.x == obj2.x && obj1.y == obj2.y; } };
int main() { std::vector<Point> v; for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) { Point pt; pt.x = i; pt.y = j; v.push_back(pt); } }
Point needFind; needFind.x
= 4; needFind.y = 3;
std::vector
<Point>::iterator iter = std::find_if(v.begin(), v.end(),
std::bind2nd(PointFindByCoord(), needFind));
if (iter == v.end()) { // 未找到 } else std::cout << "the index of value Point(" << (*iter).x << ", "
<< (*iter).y << ") is " << std::distance(v.begin(), iter)
<< std::endl; return 0; }

 

posted on 2013-03-13 14:06  zhuyf87  阅读(5400)  评论(0编辑  收藏

导航