- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
注意:此问题仅旨在从性能的角度检查代码,而不是可读性和可扩展性。他们说“过早的优化是万恶之源”,而在我使用的示例中,潜在的性能优势可以忽略不计。我只是想知道编译器优化是否会导致计算机最终执行命令,就像我通过仅使用索引而不使用 for 循环手动编写的命令一样。
好吧,我有一个非常简单的算法,它会从用户那里接收一个固定大小为 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
但是,在编程世界中有一条硬性规定:
Readability/maintainability trumps all.
我不在乎您的代码和算法有多快多酷。如果我不能阅读和使用它,那对我来说毫无意义。更不用说——如果您 3 个月不碰它(这在生产代码中是一小段时间),您回来时会完全不知道自己做了什么。
综上所述,我很高兴看到你试图让你的代码更快,但你试图这样做的方式是强制程序员写出 10 个不同的语句,而他们只能写一个一个循环。规范发生了什么变化,现在您需要接受 100 个输入? 1000?这是现实世界中经常发生的事情!
此代码不可维护或可扩展。
因此,即使您可以通过自己展开循环来稍微更快(这实际上可能不是真的,因为现代编译器会为您做这些),我仍然会说不要不要这样做!即使这对您的运行时性能有轻微影响,它也会对 future 的开发人员性能产生远更大的负面影响,最终会影响运行时性能。
关于c++ - 在合适的情况下编写索引是否比仅从 c++ 中的性能 POV 的 for 循环更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59274847/
我仅在 WIN7 PC 上收到此通知,仅使用 IE。 Firefox 总是很好,旧版 Windows 上的 IE 似乎也不错。这让我大吃一惊,我不知道为什么 IE 认为 SSL 证书有问题。有没有人以
概述 对于我产品的新版本 v1.9.0,我创建了一个新的 MSI 安装程序。该应用程序的先前版本是 v1.7.0。 卸载旧版本然后安装新版本工作正常。 但是当我尝试使用 v1.9.0 安装程序更新旧版
该网站有一个全高图像启动。更多内容位于首屏下方,图像底部有一个“滚动”元素,以提示用户发现其余内容。单击后,我成功地使网站向下滚动 300 像素。然而,我想顺利地做到这一点。这是我当前的代码: w
var i = 0; function Myfunc() { var newdiv = document.createElement('div'); var el = document
这纯粹是为了学习目的;我知道 CSS 将是这种情况下的首选方法。 我知道在 JavaScript 中,您可以使用内联事件处理将鼠标悬停在图像上,如下所示: 我知道您可以在您的站点中安装 jQuery
我只想从curl请求中获取 header curl -I www.google.com 一切都很棒。现在我想这样做,但也传递发布数据: curl -I -d'test=test' www.google
以下代码旨在更改一个字段的颜色: Untitled Document var bkColor =
我正在使用 grep 递归搜索目录,并使用以下参数希望只返回第一个匹配项。不幸的是,它返回了不止一个——事实上,我上次查看时返回了两个。似乎我有太多的争论,尤其是没有得到想要的结果。 :-/ # gr
我只想搜索当前目录中的所有文件。我试过这个 grep foo * 但我收到此错误 grep: bar: Is a directory 我也尝试过这个 grep -r foo 但这也在搜索子目录。 最佳
我正在构建一个销售点应用程序,我想打印一张收据。问题是我使用的打印机无法打印纯文本的任何图形,我在 javafx 中只能找到使用 Print API 打印节点或使用像 jasper 这样都包含图形的报
是否有任何操作系统在完全加载时仅提供用于控制台应用程序执行的 java 环境?理想情况下,它会在加载时自动启动程序 最佳答案 这是一个名称为:JavaOS 的东西 从我的角度来看,更好的方法是安装一个
在工作中,我们有一个每晚执行 mysql 数据转储的脚本。对于开发,我们通常需要使用来自最近转储的数据。一段时间以来,我们一直每天都进行数据库还原,但现在我们已经到了每天还原花费近一个小时的地步。有没
我的移动模式菜单有问题。 onClick 它淡出。我想保留此设置,但我不希望它在单击下拉部分时淡出。这是链接:http://jsfiddle.net/zLLzrs6b/3/感谢您的帮助! html:
经过大量研究和反复试验,我谦虚地向各位 CSS 专家寻求帮助。这就是我需要的: 我有两张图片:titlelogo 和 newlogo。 在全屏模式下,newlogo 需要在左边,titlelogo 在
这个问题在这里已经有了答案: Exclusive CSS selector (3 个答案) 关闭 3 年前。 我的文档结构如下: ... ... something something someth
我有一个具有以下要求的表: 所有列的宽度必须可变 所有列的宽度不得超过必要的宽度 所有单元格必须保留空白(white-space:pre/pre-wrap) 当(且仅当)超过最大定义宽度 (1000p
我正在寻找一个正则表达式来仅匹配具有特殊 字符且大小为4+ 的数字 字符串。我对此处发布的问题做了一些评论: 测试网站: http://regexlib.com/RETester.aspx 1- re
我正在为我的元素开发一个纯 CSS 灯箱解决方案。我用谷歌搜索了它,但到目前为止只找到了部分解决方案。 我正在寻找这些功能: 显示任意宽任意高的内容(无固定高/宽) 垂直居中和水平居中 如果内容宽度和
出于各种原因,我目前正在尝试使用 HTML/CSS 创建网格布局(我知道 Bootstrap 等,但在这种情况下没有选择,而且我无法添加标记元素)。 我有以下代码(容器 div,每次都有一个带有 ul
有没有办法使用String.format()格式化 double 以仅获取小数? System.out.println(String.format("%.2f", 1.23456d)); 正如预期的那
我是一名优秀的程序员,十分优秀!