C++之迭代器(Iterator)篇

  1. 迭代器(Iterator)的介绍
    背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历。
    定义:迭代器是一种检查容器内元素并遍历元素的数据类型。
    迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围
    迭代器(Iterator)是指针(pointer)的泛化,它允许程序员用相同的方式处理不同的数据结构(容器)。
    (1)迭代器类似于C语言里面的指针类型,它提供了对对象的间接访问。
    (2)指针是C语言中的知识点,迭代器是C++中的知识点。指针较灵活,迭代器功能较丰富。
    (3)迭代器提供一个对容器对象或者string对象的访问方法,并定义了容器范围

  2. 迭代器和指针的区别:
    容器和string有迭代器类型同时拥有返回迭代器的成员。如:容器有成员begin和end,其中begin成员复制返回指向第一个元素的迭代器,而end成员返回指向容器尾元素的下一个位置的迭代器,也就是说end指示的是一个不存在的元素,所以end返回的是尾后迭代器

  3. 容器迭代器的使用
    每种容器类型都定义了自己的迭代器类型,如vector:v

### C++ 迭代器简介 迭代器C++标准模板库(STL)中的一个重要概念,用于提供一种统一的方式来访问容器中的元素。通过迭代器可以像指针一样操作序列容器(如`vector`, `list`)以及关联容器(如`map`, `set`),而无需关心底层的数据结构细节。 #### 基本语法与定义 对于向量(vector),可以通过如下方式声明并初始化一个迭代器: ```cpp std::vector<int>::iterator iter = vt.begin(); // 起始位置的迭代器[^1] std::vector<int>::iterator iter_end = vt.end(); // 结束位置的迭代器 ``` 这里创建了两个迭代器对象`iter`和`iter_end`分别指向向量的第一个元素和最后一个元素之后的位置。注意,`end()`返回的是超出范围的一个位置,并不对应任何实际存在的元素。 #### 遍历容器 利用上述定义好的迭代器,能够轻松地遍历整个容器内的所有项: ```cpp for (std::vector<int>::iterator it = vt.begin(); it != vt.end(); ++it){ std::cout << *it << " "; } ``` 这段代码会依次输出向量内每一个整数值。其中`*it`表示解引用当前迭代器所指向的内容;`++it`则是使迭代器前进到下一个位置的操作符重载形式。 #### 自定义迭代器 除了内置支持的标准迭代器外,在某些情况下可能还需要构建特定用途的自定义迭代器。借助于Boost库提供的工具类`boost::iterator_adaptor`可以帮助简化这一过程。下面给出了一段展示如何基于此机制设计简单迭代器的例子[^2]: ```cpp #include <boost/iterator/iterator_adaptor.hpp> // ...其他必要的头文件... class MyIterator : public boost::iterator_adaptor< MyIterator, // Derived int*, // Base boost::use_default // Value type > { private: friend class boost::iterator_core_access; protected: explicit MyIterator(int* p): iterator_adaptor_(p){} public: MyIterator() {} }; void example_usage(){ int arr[] = {0, 1, 2}; MyIterator first(arr), last(arr + sizeof(arr)/sizeof(*arr)); while(first!=last){ std::cout<<*first<<" "; ++first; } } ``` 在这个例子中,实现了自己的迭代器类型`MyIterator`,它可以用来遍历普通的C风格数组。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值