c – 查找向量的max_element,其中使用成员来确定其是否为最大值

前端之家收集整理的这篇文章主要介绍了c – 查找向量的max_element,其中使用成员来确定其是否为最大值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑具有成员x和std :: vector<的A类. A>.现在,在向量内的所有元素中搜索最大x是一项常见任务.显然,如果x上有迭代器,我只能使用std :: max_element.但我必须自己写一个,或者我只是做一个简单的for循环.
maxSoFar = -std::numeric_limits< double >::max();
for( std::vector< A >::const_iterator cit = as.begin(); cit != as.end(); ++cit )
{
  if( cit->x > maxSoFar )
    maxSoFar = cit->x;
}

但它太乏味了,我太懒了..有更好的选择吗?

解决方法

如果你可以使用boost,那么你可以为max_element所期望的二元谓词编写一个lambda表达式:
struct A
{
    A(int n): x(n)
    {
    }
    int x;
};

using namespace std;
using namespace boost::lambda;

int main()
{
    vector<A> as;
    as.push_back(A(7));
    as.push_back(A(5));
    as.push_back(A(3));

    vector<A>::iterator iter = max_element(as.begin(),as.end(),bind(&A::x,_2) > bind(&A::x,_1));
    int max = iter->x;
}

猜你在找的C&C++相关文章