STL中的search_n()
时间:2010-06-02 来源:wanpengcoder
关于search_n的用法:
请看以下操作:
pos = search_n (coll.begin(), coll.end(), 4, 3, greater<int>());
以这种方式来搜寻合适某特殊准则的元素,其方法和STL的其他组件可谓是“大相径庭”(这个文明词有点囧)
。按照STL的一般用法,应该这么做:
pos = search_n_if(coll.begin(), coll.end(), 4, bind2nd(greater<int>(), 3));
可惜这个新算法被引入C++标准时,没有人注意到其中的不一致,当然,也许你觉得4个参数的形式更加敏捷,不过它实际上只需要一个一元判断式的时候,却要求获得一个二元的判断式,恐怕非你所愿。例如,为了利用一个自己写的一个一元判断式,你通常会这么做:
bool isPrime (int elem);
...
pos = search_n (coll.begin(), coll.end(), 4, isPrime);
然而根据实际定义,你却必须写一个二元的判断式,所以你要写一个包装:
bool binaryIsPrime (int elem1, int)
{
return isPrime(elem1);
}
...
//这个0相当于第二个参数,传给int,不处理
pos = search_n(coll.begin(), coll.end(), 4, 0, binaryIsPrime);
search_n(InputIterator beg, InputIterator end, size count, const T& value, BinaryPredicate op)
使用相当于op(elem, value);
相关阅读 更多 +