计划效率&可读性

时间:2014-12-30 19:09:27

标签: c++ performance memory

我想知道哪个程序更有效(内存使用)以及为什么?第一个程序具有较小的变量但更多的计算。你真的可以说吗?所有程序都能找到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中)

5 个答案:

答案 0 :(得分:2)

检查优化编译器的程序集以得出结论

参见例如 this ¹

godbolt.com

enter image description here

other 上的 godbolt too :¹

enter image description here

在GCC上使用这些优化标志看起来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;
}