0

この質問は少し理論的std::minmaxなものかもしれませんが、このように定義する背後にある設計のインセンティブは何なのだろうか

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

つまり、渡されたオブジェクトであるIMOliコピーされ、その各メンバーもコピー構築可能でなければなりません。

一方、std::min_element(またはこの件に関してstd::max_element) は、コンテナ イテレータのみが渡されるという意味でより「効率的」です (実際にコンテナ全体をコピーする必要はありません)。

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

編集 - Joachim Pileborg のコメントに基づいて、initializer_list<T>オブジェクトがコピーされていないため、質問を特定しています - なぜstd::minmax、任意のコンテナーではなく、そのようなオブジェクトに制約されているのか (いわば「非定数」の性質を持つ)

4

1 に答える 1

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;
于 2014-12-16T12:41:17.857 に答える