在 C++ 中,迭代器 是一种对象,用来遍历(访问和操作)容器(如 vector
、list
、map
等)中的元素。迭代器是一个通用工具,它允许你使用统一的方式遍历、修改和删除容器中的元素。迭代器像是指针,但比指针更灵活,能与不同类型的容器配合使用。
可以把迭代器想象成一本书中的页码,指向书中的某一页。通过移动页码,你可以访问每一页(元素)。
1、为什么要使用迭代器
- 统一访问方式:你可以使用相同的方式来遍历不同类型的容器(比如
vector
、list
、set
等),因为所有容器都支持迭代器。 - 安全性:迭代器可以提供对容器元素的安全访问,避免直接使用数组下标可能带来的越界问题。
- 灵活性:迭代器不仅能读取元素,还能修改、删除元素,甚至支持在遍历过程中插入新元素。
2、迭代器的常见操作:
- 初始化迭代器:通过容器提供的
begin()
方法初始化迭代器,指向容器的第一个元素。 - 访问元素:使用解引用操作符
*
来访问迭代器指向的元素。 - 迭代:使用
++
运算符将迭代器移动到下一个元素。
3、迭代器示例
示例 1:使用迭代器遍历 vector
我们先看一个使用 vector
和迭代器的简单例子:
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 定义一个 vector 容器
vector<int> vec = {1, 2, 3, 4, 5};
// 创建迭代器,指向 vector 的第一个元素
vector<int>::iterator it = vec.begin();
// 通过迭代器遍历整个 vector
while (it != vec.end()) { // 当迭代器未到达容器的尾部时
cout << *it << " "; // 输出当前迭代器指向的元素
++it; // 移动迭代器到下一个元素
}
cout << endl;
return 0;
}
解释:
vec.begin()
返回一个迭代器,指向vector
的第一个元素。it != vec.end()
判断迭代器是否已遍历到vector
的末尾,vec.end()
返回一个指向容器末尾的迭代器,它指向的不是最后一个元素,而是最后一个元素之后的位置。*it
解引用迭代器,获取它所指向的元素。++it
将迭代器移向下一个元素。
输出:
1 2 3 4 5
示例 2:使用迭代器修改元素
迭代器不仅可以用来访问元素,还可以修改它们:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// 创建迭代器,指向 vector 的第一个元素
vector<int>::iterator it = vec.begin();
// 使用迭代器修改容器中的元素
while (it != vec.end()) {
*it = *it * 2; // 将每个元素乘以 2
++it;
}
// 输出修改后的容器
for (int i : vec) {
cout << i << " ";
}
cout << endl;
return 0;
}
输出:2 4 6 8 10
示例 3:使用 erase()
删除元素
迭代器还可以用于删除容器中的元素:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// 创建迭代器,指向 vector 的第一个元素
vector<int>::iterator it = vec.begin();
// 删除第二个元素
it++; // 移动到第二个元素
vec.erase(it); // 使用 erase 删除迭代器指向的元素
// 输出修改后的容器
for (int i : vec) {
cout << i << " ";
}
cout << endl;
return 0;
}
输出:1 3 4 5