簡體   English   中英

std :: minmax initializer_list <T> 爭論

[英]std::minmax initializer_list<T> argument

也許這個問題有點理論上的問題 ,但是我不知道像這樣定義std::minmax背后的設計動機是什么?

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

這意味着將復制傳遞的對象li IMO,並且其每個成員也必須是可復制構造的。

雖然std::min_element (或就此而言, std::max_element )在僅傳遞容器迭代器的意義上更“有效”(無需實際復制整個容器)

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

編輯-基於Joachim Pileborg的注釋, initializer_list<T>對象沒有被復制,因此我要指出我的問題-為什么std::minmax限於此類對象而不是任意容器(具有“非常量”性質) , 可以這么說)

對於您的更新問題: 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM