我想知道哪个程序更有效(内存使用)以及为什么?第一个程序具有较小的变量但更多的计算。你真的可以说吗?所有程序都能找到3个数字中最大的一个。
#include <iostream>
using namespace std;
int max(int num1, int num2, int num3) {
if((num1 > num2) && (num1 > num3)) {
return num1;
} else if((num2 > num1) && (num2 > num3)) {
return num2;
} else {
return num3;
}
}
int main() {
int num1, num2, num3;
cout << "Enter first number" << endl;
cin >> num1;
cout << "Enter second number" << endl;
cin >> num2;
cout << "Enter third number" << endl;
cin >> num3;
cout << "Maximum value: " << max(num1, num2, num3) << endl;
return 0;
}
OR
#include <iostream>
using namespace std;
int maximum(int num1, int num2, int num3) {
int largest;
if (num1 > num2) {
largest = num1;
} else {
largest = num2;
} if (num3 > largest) {
largest = num3;
} return largest;
}
int main() {
int number1, number2, number3, max;
cout << "Enter the first number: ";
cin >> number1;
cout << "Enter the second number: ";
cin >> number2;
cout << "Enter the third number: ";
cin >> number3;
max = maximum(number1, number2, number3);
cout << "The maximum value is " << max << endl;
return 0;
}
另外,我想知道在main()和max()函数中给出相同的变量名是不是很糟糕? (在计划1中)
答案 0 :(得分:2)
检查优化编译器的程序集以得出结论
参见例如 this ¹
godbolt.com
other 上的 godbolt too :¹
maximum
效率更高¹出现了神甫永久链接可能无法正常工作。您可以轻松自行粘贴代码段。我使用rand()
和return
来避免编译器全部优化
答案 1 :(得分:1)
效率有不同的风格。一个程序可以更有效地使用内存,而另一个程序执行得更快。因此,第一步是更准确地了解您所追求的效率类型。
尽管如此,几乎在所有计算机平台上都有一些字节甚至不值得考虑。因此,即使使用更多内存,简化代码以更快地运行通常也是一种很好的方法。
在不同的函数中使用相同的变量名称没有问题,除非它们引起混淆。
答案 2 :(得分:1)
最好是在第一个实例中写下可读代码的途径。
如果性能是个问题,请做一些分析。永远记住80/20规则http://en.wikipedia.org/wiki/Pareto_principle
所以回答你的问题我不知道,因为它取决于OS /编译器选项。
答案 3 :(得分:0)
我个人会这样写:
int max(int a, int b)
{
return (a > b ? a : b);
}
int main()
{
int number1, number2, number3;
cout << "Enter the first number: ";
cin >> number1;
cout << "Enter the second number: ";
cin >> number2;
cout << "Enter the third number: ";
cin >> number3;
cout << "The maximum value is " << max(number1, max(number2, number3)) << endl;
return 0;
}
答案 4 :(得分:0)
除了“double”之外,第二个算法必然会更快,因为使用较少的条件分支 - 总是2,而第一个算法需要至少2个条件分支,有时需要更多。
您可以考虑省略作业:
int max(int num1, int num2, int num3) {
if(num1<num2) num1=num2;
if(num1<num3) num1=num3;
return num1;
}