std::minmax initializer_list<T>参数

std::minmax initializer_list<T> argument

本文关键字:gt 参数 lt list minmax initializer std      更新时间:2023-10-16

也许这个问题有点理论性,但我想知道定义这样的std::minmax背后的设计动机是什么

template <class T>
pair<T,T> minmax (initializer_list<T> il);

这意味着,IMO,传递的对象,li将被复制,并且其每个成员也必须是可复制的。

虽然,std::min_element(或就此而言std::max_element)在只有容器迭代器被传递的意义上更"高效"(不需要实际复制整个容器)

template <class ForwardIterator>
ForwardIterator min_element (ForwardIterator first, ForwardIterator last);

编辑 - 基于 Joachim Pileborg的评论,initializer_list<T>对象没有被复制,所以我指出了我的问题 - 为什么std::minmax被限制在这样的对象而不是任意容器(可以这么说,它们具有"非常量"性质)

对于您更新的问题: minmax也可以处理一对迭代器的一般情况,它被称为 minmax_element 。所以minmax本身只是一个方便的速记,能够编写这样的紧凑内容:

// define a, b, c here
int min, max;
std::tie(min, max) = std::minmax({a, b, c});

。而不是写这个:

// define a, b, c here
int min, max;
auto list = {a, b, c};
auto result = std::minmax_element(list.begin(), list.end());
min = *result.first;
max = *result.second;