在写程序的时候经常碰到一些小算法,虽然简单但又不得不写,最近发现STL可以使用简单的语句轻松的解决,刚开始使用还真有点兴奋。
比如这个例子:要查找一个向量(数组之类)中,满足某条件的元素
typedef
struct
tagPOSINFO
... {
int nStartPos; //起始位置
int nEndPos; //结束位置
} POSINFO, * LPPOSINFO;
typdef vector < POSINFO > POSINFOVCT;
POSINFOVCT vctPosInfo;
class PosExist
... {
public:
PosExist(int nPos) : m_nPos(nPos) ...{}
BOOL operator(POSINFO posinfo) const
...{
return m_nPos >= posinfo.nStartPos && m_nPos <= posinfo.nEndPos;
}
private:
int m_nPos;
} ;
POSINFOVCT::iterator it;
it = find_if(vctPosInfo.begin(), vctPosInfo.end(), PosExist(n));
... {
int nStartPos; //起始位置
int nEndPos; //结束位置
} POSINFO, * LPPOSINFO;
typdef vector < POSINFO > POSINFOVCT;
POSINFOVCT vctPosInfo;
class PosExist
... {
public:
PosExist(int nPos) : m_nPos(nPos) ...{}
BOOL operator(POSINFO posinfo) const
...{
return m_nPos >= posinfo.nStartPos && m_nPos <= posinfo.nEndPos;
}
private:
int m_nPos;
} ;
POSINFOVCT::iterator it;
it = find_if(vctPosInfo.begin(), vctPosInfo.end(), PosExist(n));
一句话就可以搞定,it就是满足该条件的元素的地址,麻烦的就是要新建一个类,这个类重载了()运算符,PosExist(n)先执行构造函数生成一个无名对象,然后再执行重载函数的内容,只有生成了对象,运算符才能起作用,这里就是最初令我费解的地方。
如果是单纯的数组就更简单了,查MSDN就明白了