0Pricing
C++ Academy · 课时

遍历向量:索引、范围 for、迭代器

使用索引访问、范围 for 和显式迭代器遍历向量

遍历向量:索引、范围 for、迭代器 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。

三种迭代方式

您可以通过以下方式遍历 vector:

  • 基于索引的 for (size_t i = 0; i < v.size(); ++i)
  • 基于范围的 for (auto& x : v)
  • 使用迭代器的 for (auto it = v.begin(); it != v.end(); ++it)

基于索引的循环

这种方式在 C 语言中就很常见。当您需要同时获取索引和值时,它非常有用。

for (size_t i = 0; i < v.size(); ++i) {
    std::cout << i << ": " << v[i] << "\n";
}

size_t 与 int

size() 返回 size_t,它是无符号类型。将它与有符号的 int 计数器混用会导致编译器警告和细微错误。请使用 size_t 或 C++20 的 std::ssize。

基于范围的 for

当您不需要索引时,这是最简洁的形式。请选择合适的引用限定符。

for (const auto& x : v) std::cout << x << " ";   // read only
for (auto& x : v) x *= 2;                          // modify in place

迭代器

迭代器是一种广义指针。v.begin() 指向第一个元素,v.end() 指向最后一个元素之后的位置。

for (auto it = v.begin(); it != v.end(); ++it) {
    std::cout << *it << " ";
}

const_iterator

当您不需要修改元素时,请使用 cbegin() 和 cend(),此时迭代器类型为 const_iterator。

反向迭代器

rbegin() 和 rend() 从后向前进行迭代。解引用会得到相同的元素,但顺序相反。

for (auto it = v.rbegin(); it != v.rend(); ++it) {
    std::cout << *it << " ";
}

迭代器算术

Vector 迭代器支持随机访问:您可以对它们加减整数,并使用 < 进行比较。

auto it = v.begin();
it += 3;          // skip 3 elements
std::cout << *it;

算法使用迭代器

STL 算法接受一对迭代器。将 v.begin(), v.end() 传递给 std::sort 或 std::find 等算法。

#include <algorithm>
std::sort(v.begin(), v.end());
auto it = std::find(v.begin(), v.end(), 42);

迭代器何时会失效

向 vector 添加元素可能会触发重新分配。在任何改变容量的操作之后,指向该 vector 的所有迭代器、指针和引用都会失效。

陷阱:迭代时修改容器

在遍历某个 vector 的基于范围的 for 循环中,绝不要对同一个 vector 调用 push_back 或 erase。请构建一个新的 vector,或先收集要操作的索引,之后再执行操作。

快速检查

如果 push_back 触发重新分配,哪种迭代形式中的迭代器会失效?

回顾

不需要索引时请选择基于范围的 for,需要索引时请选择基于索引的 for,使用算法时请选择基于迭代器的 for。重新分配会使迭代器失效,因此在迭代时绝不要调用 push_back。

常见问题解答

「遍历向量:索引、范围 for、迭代器」课时是免费的吗?

是的 — 「遍历向量:索引、范围 for、迭代器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。

「遍历向量:索引、范围 for、迭代器」这节课中我会学到什么?

使用索引访问、范围 for 和显式迭代器遍历向量 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C++ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「遍历向量:索引、范围 for、迭代器」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C++ Academy 课中编写并运行代码吗?

能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. std::vector 基础:push_back、size、capacity
  2. 遍历向量:索引、范围 for、迭代器
  3. 修改向量:insert、erase、clear
  4. vector、std::array 与 C 数组的比较
← 返回 C++ Academy