- 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/
在我的应用程序中,我有一个 Google map 和位于两个不同 div 中的相关街景。 POV 的街景值以打包字符串的形式存储在数据库内,例如: 34.094522, -118.3112770000
我正在尝试构建一个非常简单的场景,其中包含一些用 wrapper 包裹的圣诞礼物。这是我尝试执行此操作的方法,但图像 (wrapping_paper.jpg) 只是被映射到盒子面上,然后在 Z 方向上
经过长时间的搜索,我终于找到了如何使用 overflow: hidden; 裁剪图像而不扭曲/挤压图像。现在我的下一个问题;我如何让图像显示我想要的部分,这意味着,当使用 overflow:hidde
我使用 three.js 创建了一个基本场景。我的目标是基于 FirstPersonControls.js 制作一个 pov 相机 我修改了它的代码以满足我的需要(点击鼠标移动 View 等)我快完成
这里的这个函数基本上获取开始和结束日期,并循环遍历这些日期之间的所有月度日期。我面临的问题是,如果用户将日期指定为 2018-01-30(Y-m-d 格式)并且它将跳过 2 月,而是给出一个不需要的日
所以,我想要做的是在自定义 2D 多边形上应用颜色渐变,但我找不到任何有关如何执行此操作的说明/示例(我只能找到 3D 的)。具体来说,我想这样做: 总的来说,我想知道如何从(多边形的)中心向外应用一
我正在将 C#/directx 游戏客户端移植到 Java,这样我就可以学习一些 C#(因为我完全不喜欢它),同时提高我对 java opengl 引擎的知识。 当我遇到类似以下情况时: Monito
单精度(32 位):位除法为 like this : 所以我们有 23 位的尾数/有效数。 因此我们可以表示 2^23 个数字(通过 23 位):即 8388608 --> 7 位长。 但是 我读到尾
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
SELECT DISTINCT p.products_image, p.products_quantity, m.manufacture
我正在尝试安装 POV-Ray 3.7 稳定版。我从github repo下载了源代码. 我遵循了 README file 中描述的 unix 系统说明。 . 不幸的是,我在运行配置命令时收到错误消息
我能够通过以下方式将 Functor 的定义从范畴论映射到 Haskell 的定义:因为 Hask 的对象是类型,仿函数 F 映射每种类型 a的 Hask到新类型F a粗略地说,在它前面加上“F”。
我已经知道如何处理 ng-repeat 性能问题(使用观察者)的常见模式,例如:one-time-bind、无限滚动、等等。 但是我看到了这个answer一个建议转向指令的人。 好吧,我从简单的旧方法
我有一个简单的街景 View ,可以向我显示给定地址的街景 View : var geocoder = new google.maps.Geocoder(); var address = "344 L
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我有一个名为 StreetViewSafari 的小网络应用程序它在屏幕上有一个 StreetViewPanorama 和一个 map ,并且无法确定如何同时设置 PanoramaId(摄像头位置)和
注意:此问题仅旨在从性能的角度检查代码,而不是可读性和可扩展性。他们说“过早的优化是万恶之源”,而在我使用的示例中,潜在的性能优势可以忽略不计。我只是想知道编译器优化是否会导致计算机最终执行命令,就像
在这里,我正在尝试将一些 POV-Ray 代码转换为 Python。我正在使用 VAPORY 模块。特别是,部分 scale *1.75和 pigment{ color rgb*1.1 }非常困惑。不
我正在开发一个需要从多个角度渲染场景的应用程序。我注意到,如果我渲染一次,即使片段着色器又长又复杂(写入多个 3D 纹理),它也会以 65 FPS 运行。只要我在此之前添加另一个渲染 channel
关于这个主题有很多问题,但没有一个(one but still a short one 除外)处理以下场景。 来自 C# 4 书: 马克还写道: if you change the value of
我是一名优秀的程序员,十分优秀!