首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >for循环的效率

for循环的效率
EN

Stack Overflow用户
提问于 2012-08-08 21:30:08
回答 6查看 238关注 0票数 2

我需要堆栈溢出的意见来解决一些一直存在于我脑海中的关于循环效率的问题。现在,当我开始编程时,“让它工作”是一个很大的优先事项,我的大多数for循环看起来都是这样的。

代码语言:javascript
运行
复制
for (int i = 0; i < N; i++) {;}

然后我被启发了,特别是在C++开发中,预增量减少了一些调用,考虑到这将是N个调用,而且它不会改变我养成的习惯。

代码语言:javascript
运行
复制
for (int i = 0; i < N; ++i) {;}

这在一段时间内已经足够好了,但重点是可读性,在阅读了Steve McConnell完成的一些代码后,我得出了以下结论。

代码语言:javascript
运行
复制
for (int loop_index = 0; loop_index < loop_count; ++loop_index) {;}

并且这些变量会根据代码的上下文而变化。然后,我阅读了一些关于内置类型、构造函数和赋值的有效C++。基本上,两者之间的区别

代码语言:javascript
运行
复制
int i = 42;

代码语言:javascript
运行
复制
int i(42); 

前者调用构造函数和赋值运算符,而后者仅调用构造函数。所以我在写代码的时候把它写进了我的程序中。所以我的问题是,这是编写for循环的最有效和最易读的方式吗:

代码语言:javascript
运行
复制
for (int loop_index(0); loop_index < loop_counter; ++loop_index) {;}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-08-08 21:35:50

实际上,

代码语言:javascript
运行
复制
for (int i = 0; i < N; i++) {;}

很好。i是一个int,所以编译器无论如何都会优化后增量。是否使用int i(42);int i = 42;初始化int也是一个喜好问题。

我也会调用迭代器i,而不是loop_index。前者是普遍被理解的,而后者是奇怪的。

但是,如果您正在处理迭代器,情况就会发生变化。it++可能仍然会被优化为++it,但在这里,我更倾向于使用前增量。

票数 5
EN

Stack Overflow用户

发布于 2012-08-08 21:35:35

如果你没有使用迭代器,那也没关系,因为编译器会把它翻译成相同的代码。

附录:如果你使用迭代器:

代码语言:javascript
运行
复制
for(vector<int>::iterator i = a.begin(); i != a.end(); ++i)

那么++i就是i.operator++(),i++就是i.operator++(整型),这可能意味着两个不同的东西。

顺便说一句。如果这是一个问题,您可以测量性能。

票数 2
EN

Stack Overflow用户

发布于 2012-08-08 21:35:41

首先,你的最后一点是不正确的。这一行

代码语言:javascript
运行
复制
int i = 42;

复制初始化(请参阅此相关GoTW)。那里没有赋值。对于任务,您需要

代码语言:javascript
运行
复制
int i;
i = 42;

其次,在处理诸如整数类型之类的内置代码时,编译器生成的代码可能没有区别。您应该分析不同的选项并查看。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11865628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档