C++标准库vector迭代器详解

需积分: 9 2 下载量 61 浏览量 更新于2024-07-29 收藏 149KB DOC 举报
"C++ 中的 Vector 迭代器用法详解" 在C++编程中,`std::vector` 是一个非常重要的容器,它提供了一种动态数组的功能,可以在运行时改变大小。`vector` 可以被用来替代C语言中的静态数组或MFC中的`CArray`,并且在效率上通常优于它们。`vector` 支持多种操作,其中迭代器(iterator)是访问和操作`vector` 中元素的主要工具。 迭代器是一种特殊的指针,它可以遍历容器中的元素,提供了一种统一的接口来访问不同类型的容器。对于`vector`,其迭代器类型称为 `vector::iterator`。例如,我们可以声明一个迭代器变量 `iter` 如下: ```cpp std::vector<int>::iterator iter; ``` 这里,`iter` 是 `vector<int>` 的迭代器,可以用来遍历 `vector<int>` 容器内的元素。 `vector` 提供了两个成员函数 `begin()` 和 `end()`,它们分别返回迭代器,用于访问容器的第一个元素和超出容器范围的“末端元素的下一个”。`begin()` 返回的迭代器指向容器的第一个元素,而 `end()` 返回的迭代器不指向任何实际元素,而是作为标志,表示所有元素已被遍历。 ```cpp std::vector<int> ivec; // 假设 ivec 已经填充了一些元素 std::vector<int>::iterator iter = ivec.begin(); ``` 在这个例子中,`iter` 初始化为 `ivec` 的第一个元素。我们可以使用解引用操作符 `*` 来访问迭代器指向的元素,例如: ```cpp *iter = 0; // 将 iter 指向的元素赋值为 0 ``` 同时,迭代器还支持自增操作,可以将迭代器向前移动,指向容器中的下一个元素: ```cpp ++iter; // 自增操作,iter 现在指向 ivec 的第二个元素 ``` 通过结合解引用和自增操作,我们可以遍历整个 `vector` 并对每个元素执行操作: ```cpp for (iter = ivec.begin(); iter != ivec.end(); ++iter) { *iter = some_value; // 对每个元素进行操作 } ``` 除了自增,迭代器还支持自减操作 `--`,以及比较操作(如 `==` 和 `!=`),这使得我们能够编写复杂的循环结构来处理容器中的元素。 此外,`vector` 还提供了反向迭代器(reverse_iterator),它从容器的末尾开始遍历。反向迭代器的 `begin()` 和 `end()` 分别对应于正向迭代器的 `end()` 和 `begin()`。这使得我们能够方便地从后往前遍历 `vector`: ```cpp std::vector<int>::reverse_iterator riter = ivec.rbegin(); ``` `vector` 的迭代器是 C++ 标准模板库(STL)中访问和修改容器元素的核心机制,它提供了一种灵活且高效的方式来遍历和操作 `vector` 内的所有元素。熟练掌握迭代器的使用是理解和编写高质量的 C++ 代码的关键。