std :: minmax initializer_list & lt; T & gt; аргумент

Может быть, этот вопрос немного теоретический, но мне интересно, каковы дизайнерские стимулы позади определения 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);

РЕДАКТИРОВАТЬ — на основе комментария Йоахима Пилеборга, initializer_list<T> объекты не копируются, поэтому я уточняю свой вопрос — почему std::minmax ограничивается такими объектами, а не произвольными контейнерами (которые имеют, так сказать, неконстантную природу)

0

Решение

Для вашего обновленного вопроса: 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;
5

Другие решения


По вопросам рекламы [email protected]