如何在不使用if语句的情况下查找数组中的最大值和最小值? 如何在数组中找到最大值和最小值,而不使用if语句。C++中有内置函数吗?如果不是,插入排序是唯一的方法吗?请提前感谢。

如何在不使用if语句的情况下查找数组中的最大值和最小值? 如何在数组中找到最大值和最小值,而不使用if语句。C++中有内置函数吗?如果不是,插入排序是唯一的方法吗?请提前感谢。,c++,arrays,c++11,max,min,C++,Arrays,C++11,Max,Min,如果使用C++11,请使用std::minmax\u元素,如果不是,请使用std::minmax\u元素 std::vector<int> v = {1,2,3,4}; auto minmax = std::minmax_element(v.begin(), v.end()); // now minmax.first points on 1 and minmax.second points on 4 首先,您可以实现函数sort(a,b),它返回一对排序值。要做到这一点,你可以使用

如果使用C++11,请使用
std::minmax\u元素
,如果不是,请使用
std::minmax\u元素

std::vector<int> v = {1,2,3,4};
auto minmax = std::minmax_element(v.begin(), v.end());
// now minmax.first points on 1 and minmax.second points on 4

首先,您可以实现函数sort(a,b),它返回一对排序值。要做到这一点,你可以使用以下想法:
min(a,b)=(a+b)/2-|a-b |/2
max(a,b)=(a+b)/2+|a-b |/2

但这里有函数| x |=abs(x),它在内部使用“if”。因此,我们应该在没有任何“如果”的情况下实施“abs”。最简单的方法之一是:
abs(x)=sqrt(x*x)
(速度非常慢,但这只是一个想法)。对于整数值,可以使用以下方法:,等等

因此,您可以实现sort(a,b)函数,它只对一对值进行排序,而没有任何“if”。之后,您可以使用此函数对数组进行排序。之后,排序数组的第一个元素将是最小值,最后一个元素将是最大值。

我不确定他的问题是否不清楚,但很明显,minmax在内部使用if语句,您可以这样做without@aaronman当然它在内部使用if,但是没有if语句的排序也不是一件简单的事情。他没有提到排序,但是写一个函数来做与minmax相同的事情相对容易,当然我可能完全不理解他的问题是函数允许使用if语句内部有一些技巧来做它而不进行分支,这可能会满足你的需要。不适合胆小的人。:)@RetiredInja的链接中有使用掩码的无分支条件语句的示例。这也是一种将具有条件的循环矢量化的方法(手动或由编译器为您完成)。
template<typename Iterator>
std::pair<Iterator, Iterator> minmax_element(Iterator first, Iterator last)
{
   Iterator min = first, max = first;
   while (first != last)
   {
      min = *min > *first ? first : min;
      max = *max > *first ? max : first;
      ++first;
   }
   return std::make_pair(min, max);
}