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;
}