std :: minmax initializer_list <t>参数</t>

时间:2014-12-16 11:52:39

标签: c++ c++11 std c++-standard-library minmax

也许这个问题有点理论,但我想知道定义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被约束到这些对象而不是任意容器(有“非常“性质,可以这么说”

1 个答案:

答案 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;