也许这个问题有点理论,但我想知道定义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
被约束到这些对象而不是任意容器(有“非常“性质,可以这么说”
答案 0 :(得分:5)
对于您更新的问题: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;