C++中的迭代器

发布于:2025-06-26 ⋅ 阅读:(14) ⋅ 点赞:(0)

在 C++ 中,迭代器 是一种对象,用来遍历(访问和操作)容器(如 vectorlistmap 等)中的元素。迭代器是一个通用工具,它允许你使用统一的方式遍历、修改和删除容器中的元素。迭代器像是指针,但比指针更灵活,能与不同类型的容器配合使用。

可以把迭代器想象成一本书中的页码,指向书中的某一页。通过移动页码,你可以访问每一页(元素)。

1、为什么要使用迭代器

  1. 统一访问方式:你可以使用相同的方式来遍历不同类型的容器(比如 vectorlistset 等),因为所有容器都支持迭代器。
  2. 安全性:迭代器可以提供对容器元素的安全访问,避免直接使用数组下标可能带来的越界问题。
  3. 灵活性:迭代器不仅能读取元素,还能修改、删除元素,甚至支持在遍历过程中插入新元素。

2、迭代器的常见操作:

  1. 初始化迭代器:通过容器提供的 begin() 方法初始化迭代器,指向容器的第一个元素。
  2. 访问元素:使用解引用操作符 * 来访问迭代器指向的元素。
  3. 迭代:使用 ++ 运算符将迭代器移动到下一个元素。

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

 


网站公告

今日签到

点亮在社区的每一天
去签到