STL中的find_if函数
2017-07-17 14:33
281 查看
这是find()的一个更强大的版本。这个例子演示了find_if(),它接收一个函数对象的参数作为参数,
并使用它来做更复杂的评价对象是否和给出的查找条件相付。
假设我们的list中有一些按年代排列的包含了事件和日期的记录。我们希望找出发生在1997年的事件。
代码如下:
输出:
10
January 1997 Client agrees to job
这里请注意,find_if()的第三个参数是EventIsIn1997(),它是个仿函数,接收一个string对象,在运算符()的内部定义我所要的查找条件,本例的查找条件是:EventRecord.substr(11,4)=="1997",注意,这里的仿函数返回类型必须是bool类型,这客观反应在find_if()函数查找过程中的是否匹配!
=========================================
注意一下,上面的find_if没有参数,来个带参数的例子,贴出关键代码,
std::list<ClientItem*> m_pclientitemlist; //客户端列表
class EventIfExistSock
{
public:
EventIfExistSock(const int pdevid) :m_devid(pdevid){}
bool operator () (ClientItem* pci)
{
return pci->clientid == m_devid;
}
private:
int m_devid;
};
std::list<ClientItem*>::iterator sockitemiter = find_if(m_pclientitemlist.begin(), m_pclientitemlist.end(), EventIfExistSock(1001));
bool online = iter != DeviceManager::GetInstance()->GetDeviceList().end() ? true : false;
并使用它来做更复杂的评价对象是否和给出的查找条件相付。
假设我们的list中有一些按年代排列的包含了事件和日期的记录。我们希望找出发生在1997年的事件。
代码如下:
//---------------------------------------------------------------------------------------- // Desc: STL_find_if()_How to find things in an STL list MkII // Author: pigfly // Data: 2010.12.01 // Copyright (C) 2010 pigfly //---------------------------------------------------------------------------------------- #include <iostream> #include <string> #include <list> #include <algorithm> using namespace std; class EventIsIn1997 { public: bool operator () (string& EventRecord) { // year field is at position 12 for 4 characters in EventRecord return EventRecord.substr(11,4)=="1997"; //return this->substr(11,4)=="1997" } }; int main (void) { list<string> Events; // string positions 0123456789012345678901234567890123456789012345 Events.push_back("07 January 1995 Draft plan of house prepared"); Events.push_back("07 February 1996 Detailed plan of house prepared"); Events.push_back("10 January 1997 Client agrees to job"); Events.push_back("15 January 1997 Builder starts work on bedroom"); Events.push_back("30 April 1997 Builder finishes work"); list<string>::iterator EventIterator = find_if (Events.begin(), Events.end(), EventIsIn1997()); // find_if completes the first time EventIsIn1997()() returns true // for any object. It returns an iterator to that object which we // can dereference to get the object, or if EventIsIn1997()() never // returned true, find_if returns end() if (EventIterator==Events.end()) { cout << "Event not found in list" << endl; } else { cout << *EventIterator << endl; } }
输出:
10
January 1997 Client agrees to job
这里请注意,find_if()的第三个参数是EventIsIn1997(),它是个仿函数,接收一个string对象,在运算符()的内部定义我所要的查找条件,本例的查找条件是:EventRecord.substr(11,4)=="1997",注意,这里的仿函数返回类型必须是bool类型,这客观反应在find_if()函数查找过程中的是否匹配!
=========================================
注意一下,上面的find_if没有参数,来个带参数的例子,贴出关键代码,
std::list<ClientItem*> m_pclientitemlist; //客户端列表
class EventIfExistSock
{
public:
EventIfExistSock(const int pdevid) :m_devid(pdevid){}
bool operator () (ClientItem* pci)
{
return pci->clientid == m_devid;
}
private:
int m_devid;
};
std::list<ClientItem*>::iterator sockitemiter = find_if(m_pclientitemlist.begin(), m_pclientitemlist.end(), EventIfExistSock(1001));
bool online = iter != DeviceManager::GetInstance()->GetDeviceList().end() ? true : false;
相关文章推荐
- STL中的find_if函数
- STL(3) find_if函数
- STL中的find,find_if函数(对类、容器(vector、list)进行查找)
- STL(3) find_if函数
- STL中的find_if函数
- 在成员函数中使用STL的find_if函数
- STL-find,find_if函数
- STL之find_if函数
- 成员函数中使用STL的find_if函数
- STL中的find_if函数
- 在成员函数中使用STL的find_if函数
- STL中的find_if函数
- STL的find_if函数
- C++在成员函数中使用STL的find_if函数实例
- STL的find_if函数
- 详解STL的find_if函数
- STL中的find_if函数 http://blog.csdn.net/hj490134273/article/details/6051080
- STL中的find_if函数
- STL的find_if函数
- 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)