繁体   English   中英

在合适的情况下编写索引会比 C++ 中的 for 循环性能更好吗?

[英]Would writing indexes in a suitable situation be better than a for-loop performance-wise in c++?

好吧,我有一个非常简单的算法,它会从用户那里接收一个固定大小为 10 的数组和一个数字n ,它会打印给定数组中n的出现次数。 算法是这样的

int a[10] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
cin >> a[0] >> a[1] >> a[2] >> a[3] >> a[4] >> a[5] >> a[6] >> a[7] >> a[8] >> a[9];
int number;
cin >> number;
int counter = 0;
for (int i = 0; i < 10; i++)
{
    if (number == a[i]) {
        counter += 1;
    }
}
cout << counter << endl;

我正在与某人交谈是否转换行cin >> a[0] >> a[1] >> a[2] >> a[3] >> a[4] >> a[5] >> a[6] >> a[7] >> a[8] >> a[9]; 像这样的for循环

for (int i = 0; i < 10; i++)
{
    cin >> a[i];
}

会对性能产生负面影响(只有性能,而不是可读性等)。 我的假设是,在 for 循环中,我们正在创建一个变量i (然后对其进行修改等),它对性能的负面影响很小(但仍然是非零量)。 我的假设是真的吗? 它取决于编译器吗? 我可以使用时间基准来比较两者,但算法的运行时间在我的机器上会很低(大约 300 纳秒),我认为它高度依赖于算法本身以外的因素(例如空闲内存等) . 在这种情况下,理想的基准测试程序是什么?

在您已经开始工作后,您正在考虑如何使代码更好更快,这是一件非常好的事情。 我为此为你鼓掌——这是我希望我的一些同事更经常做的事情:p

然而,在编程世界中有一条硬性规定:

可读性/可维护性胜过一切。

我不在乎你的代码和算法有多快和多酷。 如果我不能阅读它并使用它,那对我来说绝对没有任何意义。 更不用说——如果你 3 个月不接触它(这是生产代码中的一小部分时间),你会在不知道你做了什么的情况下回来。

总而言之,看到您试图使代码更快,这让我很高兴,但您尝试这样做的方式是强迫程序员写出 10 条不同的语句,而他们只能在循环中执行一个语句。 规格更改会发生什么,现在您需要接受 100 个输入? 1000? 这是现实世界中经常发生的事情!

此代码不可维护或不可扩展。

因此,即使您可以通过自己展开循环来稍微加快速度(实际上可能并非如此,因为现代编译器会为您做到这一点),我仍然会说不要这样做! 即使这对您的运行时性能有轻微的影响,这将有对未来开发商业绩远远更大的负面影响,这将最终影响运行时性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM