在c ++ 11中,如何在向量上调用std :: max?

Fab*_*ien 8 c++ std initializer-list c++11

我有一个vector<data>(data我自己的宠物类型),我想找到它的最大价值.

std::maxC++ 11中的标准函数似乎适用于对象集合,但它需要初始化列表作为其第一个参数,而不是像vector以下集合:

vector<data> vd;
std::max(vd); // Compilation error
std::max({vd[0], vd[1], vd[2]}); // Works, but not ok since I don't vd.size() at compile time
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

Chr*_*ica 19

std::max重载只适用于在编译时已知小套.你需要的是std::max_element(甚至在11之前).这会将迭代器返回到集合的最大元素(或任何迭代器范围):

auto max_iter = std::max_element(vd.begin(), vd.end());
// use *max_iter as maximum value (if vd wasn't empty, of course)
Run Code Online (Sandbox Code Playgroud)