在算法中,我可以使用max来计算两个值的最大值;有没有什么快速的方法来计算三个或更多值的最大值。有什么快速的方法来计算三个值的最大值
2
A
回答
5
如果使用C++ 11,你可以使用一个初始化列表:
int max = std::max({a,b,c,d});
0
int max1 = std::max(x, y);
int final_max = std::max(max1, z);
或std::max_element
:
// min_element/max_element example
#include <iostream> // std::cout
#include <algorithm> // std::min_element, std::max_element
bool myfn(int i, int j) { return i<j; }
struct myclass {
bool operator() (int i,int j) { return i<j; }
} myobj;
int main() {
int myints[] = {3,7,2,5,6,4,9};
// using default comparison:
std::cout << "The smallest element is " << *std::min_element(myints,myints+7) << '\n';
std::cout << "The largest element is " << *std::max_element(myints,myints+7) << '\n';
// using function myfn as comp:
std::cout << "The smallest element is " << *std::min_element(myints,myints+7,myfn) << '\n';
std::cout << "The largest element is " << *std::max_element(myints,myints+7,myfn) << '\n';
// using object myobj as comp:
std::cout << "The smallest element is " << *std::min_element(myints,myints+7,myobj) << '\n';
std::cout << "The largest element is " << *std::max_element(myints,myints+7,myobj) << '\n';
return 0;
}
0
快速,constexpr
(编译时间),和通用(live example):
template <typename F>
struct fold
{
template <typename A>
constexpr typename std::decay <A>::type
operator()(A&& a) const { return std::forward <A>(a); }
template <typename A, typename... An>
constexpr typename std::common_type <A, An...>::type
operator()(A&& a, An&&... an) const
{ return F()(std::forward <A>(a), operator()(std::forward <An>(an)...)); }
};
struct max_fun
{
template <typename A, typename B>
constexpr typename std::common_type <A, B>::type
operator()(A&& a, B&& b) const
{ return a > b ? std::forward <A>(a) : std::forward <B>(b); }
};
using max = fold <max_fun>;
int main()
{
cout << ::max()(5, 9, -2, 0.1) << endl;
}
这比涉及容器上的运行时迭代的任何解决方案更快,因为有没有指针递增,也没有取消引用。它相当于一个硬编码的三元运算符序列。
只要为它们定义了std::common_type
,它就接受任意数量的任意类型的参数。
作为constexpr
函数,它可以用于在编译时计算积分值并使用它,例如,作为模板参数。
只需将max_fun
替换为另一个函数对象,便可轻松进行除max
以外的任何折叠/缩小/累加操作。
相关问题
- 1. 最快的方法来计算独特值的最大数量在德克
- 2. 加速normxcorr2的最大值的计算
- 3. 宏来计算最大值
- 4. 最快的方法来计算卷积
- 5. 习惯的方法来计算的最大值
- 6. 快速计算大浮点数如0.4^100000000 ,,有什么想法?
- 7. 有没有更快的方法来找到最小值和最大值?
- 8. 什么是R上的最快的方法来计算具有可变滚动窗口大小滚动最大?
- 9. 快速的方法来计算所有值出现在熊猫数据帧
- 10. 在二维数组中寻找最大值的快速算法
- 11. 使用R查找大量值的最快方法是什么?
- 12. 高速缓存计算值的方法
- 13. 快速的方法来计算所有顶点(与属性x)
- 14. 什么是快速计算关系的方法?
- 15. 在MATLAB中计算总和的快速方法是什么?
- 16. 用于计算相对于最小值和最大值的值的方法
- 17. 最快的算法来计算数量
- 18. 计算R中大矩阵行中指定值的更快速方法
- 19. 什么是最好的小C++包来计算矩阵的最大特征值?
- 20. 用于在钟形值列表中查找最大值的快速算法
- 21. 什么是计算32的幂对数的最快方法?
- 22. 快速结账的贝宝,为什么有三种方法来完成付款?
- 23. 快速计算卷积的方法
- 24. 查找三个值中较大和较小值的最有效算法
- 25. 最快的方法来计算两个CGPoints之间的距离?
- 26. 有没有更快的方法来区分两个数组的最小值和最大值?
- 27. Android加速计最大值
- 28. 最快的方法来计算一个大的数字列表模数
- 29. Python:快速计算几个(相同长度)列表的平均值的方法?
- 30. 计算2 * 2矩阵秩最快的方法是什么?
'std :: max_element' –