std :: minmax initializer_list <T>参数

Shm*_*Cat 0 c++ std c++-standard-library minmax c++11

也许这个问题有点理论,但我不知道什么是落后定义设计激励std::minmax这样的

template <class T>
pair<T,T> minmax (initializer_list<T> il);
Run Code Online (Sandbox Code Playgroud)

这意味着,IMO(传递的对象)li将被复制,其每个成员也必须是可复制构造的.

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

template <class ForwardIterator>
ForwardIterator min_element (ForwardIterator first, ForwardIterator last);
Run Code Online (Sandbox Code Playgroud)

编辑 - 基于Joachim Pileborg评论,initializer_list<T>对象没有被复制,所以我正在查明我的问题 - 为什么std::minmax被约束到这样的对象而不是任意容器(具有"非const"性质,可以这么说)

Mik*_*ail 5

对于您更新的问题:minmax也可以使用一对迭代器的一般情况,它被调用minmax_element.所以minmax它本身只是一个方便的简写,能够编写像这样的紧凑的东西:

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

......而不是写这个:

// 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;
Run Code Online (Sandbox Code Playgroud)