|
|
1
13
如果将代码正确地包装成行,那么内联表单的可读性将相同。另外,你应该一直这样做
更新:根据paercebal的建议修复了代码。 |
|
|
2
9
另一种选择是使用foreach宏,例如 boost foreach :
我知道在现代C++中,宏是被禁止的,但是直到AutoTi关键字被广泛地使用,这才是我找到的最好的方法,它是简洁易读的,而且仍然是完全类型化的和快速的。您可以使用任何使您获得更好性能的初始化样式来实现宏。 链接页面上还有一条关于将boost_foreach重新定义为foreach的注释,以避免烦人的所有大写字母。 |
|
|
3
5
如果在for循环之后不需要迭代器,则第一个表单(在for循环内)更好。它将其范围限制为for循环。 我很怀疑这两种方法都能提高效率。也可以使用typedef使其更易于阅读。
我建议用较短的名字;-) |
|
|
4
4
在g++at-o2优化中看到了这一点(只是具体地说) 生成的std::vector、std::list和std::map(以及friends)代码没有区别。std::deque有一个很小的开销。 所以一般来说,从性能的角度来看,它几乎没有什么区别。 |
|
|
5
4
不,坚持住是个坏主意
过早的优化是万恶之源。 此外,编译器可能比您想象的更聪明。 |
|
|
6
1
虽然迭代器的生命周期将使我倾向于for-scoped版本,但是我并没有一个特别强烈的观点。 但是,可读性可能是一个问题;这可以通过使用typedef得到帮助,这样迭代器类型更易于管理:
不是很大的进步,但有一点。 |
|
|
7
1
我没有任何控制台经验,但是在大多数现代C++编译器中,除了范围问题之外,两个选项都是等价的。实际上,即使在调试代码中,Visual Studio编译器也会将条件比较放在隐式临时变量(通常是寄存器)中。因此,虽然从逻辑上看,end()调用似乎是通过每次迭代进行的,但优化编译的代码实际上只进行一次调用,而比较是通过循环在每个子队列时间内进行的唯一操作。 控制台上可能不是这样,但您可以取消组装循环以检查优化是否正在进行。如果是,那么您可以选择您喜欢的任何样式或组织中的标准样式。 |
|
|
8
1
它可能会导致代码脱节,但我也喜欢将其提取到单独的函数中,并将两个迭代器传递给它。
并且有…
喜欢的东西:
不喜欢的事情:
但总有一天,我们会有羔羊! |
|
|
9
1
我觉得它一点也不坏。只需使用typedef来避免stl冗长和长行。
Spartan Programming 是缓解您的风格问题的一种方法。 |
|
10
0
如果您关心范围,那么可以在初始化和循环中使用大括号。通常我要做的是在函数开始时声明迭代器,并在整个程序中重用它们。 |
|
|
11
0
我同意费鲁奇奥的观点。为了将end()调用从循环中拉出,有些人可能更喜欢第一种样式。 我还可以补充说,C++0X实际上会使两个版本都更加干净:
|
|
12
0
我通常会写:
|
|
|
13
0
我发现第二个选项更具可读性,因为你不会以一条巨线结束。然而,Ferroccio提出了一个关于范围的好观点。 |
|
|
Julia · 矢量中相加为总和S的值的数量 3 年前 |
|
|
apetrai · 我应该如何假设算法使用哪种迭代器类别? 4 年前 |
|
|
Pratik · 不使用Java DeepCopy迭代器 8 年前 |
|
|
PanDe · 将两个列表合并为一个Dict、Tuple 8 年前 |
|
|
bisarch · 迭代哈希集并在每次迭代中删除多个元素 8 年前 |