【发布时间】:2017-03-10 01:18:38
【问题描述】:
C++11 有函数std::minmax_element,它返回一对值。然而,这在处理和读取时相当混乱,并且会产生一个额外的、后来无用的变量来污染作用域。
auto lhsMinmax = std::minmax_element(lhs.begin(), lhs.end());
int &lhsMin = *(lhsMinMax.first);
int &lhsMax = *(lhsMinmax.second);
有没有更好的方法来做到这一点?比如:
int lhsMin;
int lhsMax;
std::make_pair<int&, int&>(lhsMin, lhsMax).swap(
std::minmax_element(lhs.begin(), lhs.end()));
【问题讨论】:
-
还没有人提到c++17? skebanga.github.io/structured-bindings
-
一个问题:
minmax_element比min_element和max_element一起使用有效率优势吗? -
@xaxxon:C++17 的特性不在 C++11 中。该问题标记为 C++11。所以这是一个有趣的切线,但不是一个实际的解决方案。
-
@AdamHunyadi 鉴于它是一个标准的 template 库,您自动拥有所有算法的源代码。我的是
/usr/include/c++/6.2.1/bits/stl_algo.h。minmax_element只在该范围内迭代一次,所以是的,它比在 GCC 的实现中单独执行min_element和max_element更有效。 -
我认为你的“更好......类似”的代码并不是因为更长、有更多元素以及不必要地分离定义和初始化而变得更好。
标签: c++ c++11 tuples std-pair minmax