考虑具有成员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;
}
Run Code Online (Sandbox Code Playgroud)
但它太乏味了,我太懒了..有更好的选择吗?
Ben*_*ley 24
您可以将比较器传递给max_element.如果您的编译器支持lambda(它可能会),这很容易:
std::max_element(as.begin(), as.end(),
[](A a, A b){ return a.x < b.x; });
Run Code Online (Sandbox Code Playgroud)
如果你可以使用boost那么你可以为预期的二元谓词编写一个lambda表达式max_element:
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;
}
Run Code Online (Sandbox Code Playgroud)