C++ 标准库中的 <iterator> 头文件提供了一组工具,用于遍历容器中的元素。迭代器允许以统一的方式访问容器中的元素,而不需要关心容器的具体实现细节。
迭代器是一个对象,它提供了一种方法来遍历容器中的元素。迭代器可以被视为指向容器中元素的指针,但它比指针更加灵活和强大。迭代器可以用于访问、修改容器中的元素,并且可以与 STL 算法一起使用。
迭代器分类:
输入迭代器(Input Iterator):进行单次读取操作,不能进行写入操作。
 输出迭代器(Output Iterator):进行单次写入操作,不能进行读取操作。
 正向迭代器(Forward Iterator):可以进行读取和写入操作,并且可以向前移动。
 双向迭代器(Bidirectional Iterator):除了可以进行正向迭代器的所有操作外,还可以向后移动。
 随机访问迭代器(Random Access Iterator):除了可以进行双向迭代器的所有操作外,还可以进行随机访问,例如通过下标访问元素。
迭代器函数
<iterator> 头文件还定义了一些有用的函数模板和类模板,如:
std::distance:计算两个迭代器之间的距离。std::advance:将迭代器向前或向后移动指定数量的位置。std::next:返回一个指向当前迭代器下一个位置的迭代器。std::prev:返回一个指向当前迭代器前一个位置的迭代器。std::iterator_traits:一个模板类,用于提取迭代器类型信息(如类别、值类型等)。
示例:
#include <iostream>  
 #include <vector>  
 #include <iterator>  
 #include <algorithm>  
   
 int main() {  
     std::vector<int> vec = {1, 2, 3, 4, 5};  
   
     // 使用 std::ostream_iterator 将 vector 中的元素输出到 std::cout  
     std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));  
     std::cout << std::endl;  
   
     // 使用 std::reverse_iterator 反转遍历 vector  
     for (auto it = std::rbegin(vec); it != std::rend(vec); ++it) {  
         std::cout << *it << " ";  
     }  
     std::cout << std::endl;  
   
     // 使用 std::distance 计算距离  
     std::cout << "Distance: " << std::distance(vec.begin(), vec.end()) << std::endl;  
   
     return 0;  
 }
