遍历向量:索引、范围 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 反馈 — 无需本地设置。
此课程中的所有课时
- std::vector 基础:push_back、size、capacity
- 遍历向量:索引、范围 for、迭代器
- 修改向量:insert、erase、clear
- vector、std::array 与 C 数组的比较