C++ 语言 迭代器的五种类型分类

C++阿木 发布于 2025-06-14 6 次阅读


阿木博主一句话概括:C++ 迭代器类型分类与深入解析

阿木博主为你简单介绍:
在C++中,迭代器是访问容器元素的一种方式,它提供了与容器元素交互的接口。C++标准库定义了五种类型的迭代器,每种类型都有其特定的特性和用途。本文将围绕C++迭代器的五种类型进行分类,并深入解析每种迭代器的特性和使用场景。

一、
迭代器是C++中用于遍历容器元素的一种抽象概念,它允许程序员以统一的方式访问不同类型的容器。C++标准库定义了五种迭代器类型,分别是输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。以下是对这五种迭代器类型的详细分类和解析。

二、输入迭代器(Input Iterator)
输入迭代器允许单向遍历容器,并且只能读取元素。它不支持修改元素,也不支持迭代器的算术运算。

cpp
template
class InputIterator {
public:
T& operator() const; // 解引用操作符
T operator->(); // 解引用成员指针操作符
InputIterator& operator++(); // 前缀递增
InputIterator operator++(int); // 后缀递增
bool operator==(const InputIterator&) const; // 相等操作符
bool operator!=(const InputIterator&) const; // 不相等操作符
};

输入迭代器的示例使用:
cpp
include
include

int main() {
std::vector vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << it << std::endl;
}
return 0;
}

三、输出迭代器(Output Iterator)
输出迭代器允许单向遍历容器,并且只能写入元素。它不支持读取元素,也不支持迭代器的算术运算。

cpp
template
class OutputIterator {
public:
void operator=(const T&); // 赋值操作符
OutputIterator& operator++(); // 前缀递增
OutputIterator operator++(int); // 后缀递增
};

输出迭代器的示例使用:
cpp
include
include

int main() {
std::vector vec;
for (int i = 0; i < 5; ++i) {
vec.push_back(i);
}
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << it << std::endl;
}
return 0;
}

四、前向迭代器(Forward Iterator)
前向迭代器支持单向遍历容器,并且可以读取和写入元素。它不支持迭代器的算术运算。

cpp
template
class ForwardIterator : public InputIterator {
public:
ForwardIterator& operator=(const T&); // 赋值操作符
};

前向迭代器的示例使用:
cpp
include
include

int main() {
std::vector vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end(); ++it) {
it = 2; // 修改元素
std::cout << it << std::endl;
}
return 0;
}

五、双向迭代器(Bidirectional Iterator)
双向迭代器支持双向遍历容器,并且可以读取和写入元素。它支持迭代器的算术运算,如前移和后移。

cpp
template
class BidirectionalIterator : public ForwardIterator {
public:
BidirectionalIterator& operator--(); // 前缀递减
BidirectionalIterator operator--(int); // 后缀递减
};

双向迭代器的示例使用:
cpp
include
include

int main() {
std::vector vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << it << std::endl;
}
// 向前移动迭代器
it += 2;
std::cout << "Element at position 3: " << it << std::endl;
// 向后移动迭代器
--it;
std::cout << "Element at position 2: " << it << std::endl;
return 0;
}

六、随机访问迭代器(Random Access Iterator)
随机访问迭代器支持双向遍历容器,并且可以读取和写入元素。它支持迭代器的算术运算,如加、减、比较等。

cpp
template
class RandomAccessIterator : public BidirectionalIterator {
public:
RandomAccessIterator& operator+=(int); // 加法赋值
RandomAccessIterator operator+(int); // 加法
RandomAccessIterator& operator-=(int); // 减法赋值
RandomAccessIterator operator-(int); // 减法
int operator-(const RandomAccessIterator&) const; // 差值
bool operator==(const RandomAccessIterator&) const; // 相等操作符
bool operator!=(const RandomAccessIterator&) const; // 不相等操作符
};

随机访问迭代器的示例使用:
cpp
include
include

int main() {
std::vector vec = {1, 2, 3, 4, 5};
auto it = vec.begin();
std::cout << "Element at position 2: " << (it + 2) << std::endl;
std::cout << "Element at position 3: " << (it + 3) << std::endl;
std::cout << "Difference: " << (it + 3) - (it + 2) << std::endl;
return 0;
}

七、总结
本文对C++中五种迭代器类型进行了分类和解析,包括输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。每种迭代器类型都有其特定的特性和用途,了解这些迭代器类型对于编写高效的C++代码至关重要。

读者应该能够理解不同迭代器类型之间的区别,并在实际编程中根据需要选择合适的迭代器类型。掌握迭代器的使用,将有助于提高代码的可读性和可维护性。