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

In c++11, how can I call std::max on a vector?

本文关键字:max 调用 std c++11 向量      更新时间:2023-10-16

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

C++11中的标准std::max函数似乎处理对象集合,但它希望初始值设定项列表作为其第一个参数,而不是像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

我该如何解决这个问题?

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)

可能使用lambda更灵活的

vector<data> vd;
auto it = max_element(vd.cbegin(), vd.cend(), [](const data& left, const data& right)
    {
    return (left < right);
    });

您只需要通过data::operator < () 为您的类型"数据"实现比较运算符