c++ - 是否应该使用范围 for 循环而不是 vector 上的迭代器?

标签 c++ for-loop vector iterator

给定一个 vector ,vc, 可以迭代具有范围的 vector :

for (auto c : vc)
    std::cout << c;

或者使用迭代器:

for (auto it = vc.cbegin(); it != vc.cend(); ++it)
    std::cout << *it;

是否有使用一种方法而不是另一种方法的功能原因,或者这仅仅是风格问题?

最佳答案

从性能的角度来看,并没有真正的区别。正如 Bjarne Stroustrup 在他的《C++ 编程语言第 4 版》一书中所写:

The simplest loop is a range- for -statement; it simply gives the programmer access to each element of a range.

作为 KISS 原则的拥护者,我倾向于更喜欢更简单的结构而不是更复杂的结构。然而,它真的归结为你想要实现的目标。 Bjarne 在同一本书中揭示了为什么将 range-for 循环设计得简单:

Note that a range- for loop is a deliberately simple construct. For example, using it you can’t touch two elements at the same time and can’t effectively traverse two ranges simultaneously. For that we need a general for-statement.

因此,有些情况下您不能使用范围 for 循环,您必须驻留在经典的 for 语句中。

底线尽可能使用 range-for 循环,因为它更简单且更具可读性。

关于c++ - 是否应该使用范围 for 循环而不是 vector 上的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35417360/

相关文章:

c - For循环在执行条件为false后仍然递增

c++ - 用于眼动追踪的虹膜到屏幕计算

javascript - 无法在同一个 if 语句中运行两个 for 循环语句?

c++ - 什么是 C++ 中的 static_case 运算符?

r - 在 R 中使用 map() rowise

r - 2个逻辑向量的元素之间的快速最小距离(间隔)(取2)

c++ - 复合数据结构和摆弄指针

matlab - 以一定的偏移量向左和向右扩展列向量以形成二维矩阵 - MATLAB

c++ - OpenGl 读取和写入相同的纹理

c++ - 从其他函数访问变量 C++