c++迭代器介绍

简介: C++中的迭代器是一种抽象的数据访问对象,它允许对容器中的元素进行遍历,而不必暴露底层数据结构的细节。迭代器提供了一种通用的方法来访问容器中的元素,无论容器的类型是什么。C++标准库中的许多容器(如vector、list、map等)都支持迭代器。

C++中的迭代器是一种抽象的数据访问对象,它允许对容器中的元素进行遍历,而不必暴露底层数据结构的细节。迭代器提供了一种通用的方法来访问容器中的元素,无论容器的类型是什么。C++标准库中的许多容器(如vector、list、map等)都支持迭代器。


1. 迭代器的种类和特性:

1.1 输入迭代器(Input Iterator):


可以从序列中读取值。只能单趟遍历,不能多次遍历同一序列。

例如:istream_iterator。

1.2 输出迭代器(Output Iterator):


可以写入值到序列中。只能单趟遍历,不能多次遍历同一序列。

例如:ostream_iterator。

1.3 前向迭代器(Forward Iterator):


可以在同一序列上进行多趟读写操作,但只能单向移动。支持 ++ 操作。

例如:std::forward_iterator_tag。

1.4 双向迭代器(Bidirectional Iterator):

可以在同一序列上进行多趟读写操作,并支持双向移动(向前和向后)。支持 ++ 和 – 操作。

例如:std::bidirectional_iterator_tag。

1.5 随机访问迭代器(Random Access Iterator):


提供对元素的随机访问,支持指针算术运算。支持 ++, --, +=, -=, <, >, <=, >= 等操作。

例如:std::random_access_iterator_tag。

2. 迭代器的基本操作:

2.1 begin() 和 end():

begin() 返回指向容器第一个元素的迭代器。

end() 返回指向容器末尾(最后一个元素之后)的迭代器。

2.2 * 运算符:

用于访问迭代器指向的元素。

2.3 ++ 和 – 运算符:

++ 将迭代器移动到下一个元素。

– 将迭代器移动到前一个元素。

3. 迭代器的应用:

3.1 容器遍历:

std::vector<int> myVector = {1, 2, 3, 4, 5};
for (auto it = myVector.begin(); it != myVector.end(); ++it) {
    std::cout << *it << " ";
}

3.2 算法与迭代器结合:

#include <algorithm>
std::vector<int> myVector = {5, 3, 1, 4, 2};
std::sort(myVector.begin(), myVector.end());

3.3 自定义容器与迭代器:

class MyContainer {
private:
    int data[5] = {1, 2, 3, 4, 5};
public:
    class iterator {
    private:
        int* ptr;
    public:
        iterator(int* p) : ptr(p) {}
        int& operator*() { return *ptr; }
        iterator& operator++() { ++ptr; return *this; }
        bool operator!=(const iterator& other) const { return ptr != other.ptr; }
    };

    iterator begin() { return iterator(data); }
    iterator end() { return iterator(data + 5); }
};

MyContainer myContainer;
for (auto it = myContainer.begin(); it != myContainer.end(); ++it) {
    std::cout << *it << " ";
}

4. 迭代器范围:

迭代器通常用于表示一个范围,包括起始位置和终止位置。可以使用两个迭代器来表示一个容器中的一段元素。

std::vector<int> myVector = {1, 2, 3, 4, 5};
auto start = myVector.begin() + 1;
auto end = myVector.end() - 1;
for (auto it = start; it != end; ++it) {
    std::cout << *it << " ";
}


目录
相关文章
|
3月前
|
C++ 容器
【C/C++笔记】迭代器
【C/C++笔记】迭代器
25 1
|
3月前
|
存储 安全 程序员
【C/C++笔记】迭代器范围
【C/C++笔记】迭代器范围
66 0
|
5月前
|
算法 数据处理 C++
C++一分钟之-迭代器与算法
【6月更文挑战第21天】C++ STL的迭代器统一了容器元素访问,分为多种类型,如输入、输出、前向、双向和随机访问。迭代器使用时需留意失效和类型匹配。STL算法如查找、排序、复制要求特定类型的迭代器,注意容器兼容性和返回值处理。适配器和算法组合增强灵活性,但过度使用可能降低代码可读性。掌握迭代器和算法能提升编程效率和代码质量。
53 3
|
5月前
|
编译器 C语言 C++
C++ STL中list迭代器的实现
C++ STL中list迭代器的实现
C++ STL中list迭代器的实现
|
5月前
|
存储 编译器 Linux
C++初阶学习第十弹——探索STL奥秘(五)——深入讲解vector的迭代器失效问题
C++初阶学习第十弹——探索STL奥秘(五)——深入讲解vector的迭代器失效问题
53 7
|
4月前
|
C++ 容器
【C++】string类的使用①(迭代器接口begin,end,rbegin和rend)
迭代器接口是获取容器元素指针的成员函数。`begin()`返回首元素的正向迭代器,`end()`返回末元素之后的位置。`rbegin()`和`rend()`提供反向迭代器,分别指向尾元素和首元素之前。C++11增加了const版本以供只读访问。示例代码展示了如何使用这些迭代器遍历字符串。
|
6月前
|
C语言
从C语言到C++_29(红黑树封装set和map)红黑树迭代器的实现(下)
从C语言到C++_29(红黑树封装set和map)红黑树迭代器的实现
47 3
|
6月前
|
算法 C语言 C++
从C语言到C++_20(仿函数+优先级队列priority_queue的模拟实现+反向迭代器)(上)
从C语言到C++_20(仿函数+优先级队列priority_queue的模拟实现+反向迭代器)
49 1
|
6月前
|
C语言 容器
从C语言到C++_17(list的模拟实现)list不是原生指针的迭代器(下 )
从C语言到C++_17(list的模拟实现)list不是原生指针的迭代器
27 1
|
6月前
|
C语言 计算机视觉
从C语言到C++_17(list的模拟实现)list不是原生指针的迭代器(中)
从C语言到C++_17(list的模拟实现)list不是原生指针的迭代器
31 1