《STL源码剖析》学习之迭代器

本文探讨了STL中的迭代器,解释了其作为智能指针的角色,强调了迭代器在不同容器中的独特实现。迭代器允许在不暴露容器内部结构的情况下遍历元素,使得算法可以统一处理不同容器。文章通过实例展示了迭代器的分类,包括Input、Output、Forward、Bidirectional和Random Access Iterator,并解释了迭代器分类的效率优势。
摘要由CSDN通过智能技术生成

一、迭代器作用

       在设计模式中有一种模式叫迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素,这种设计思维在STL中得到了广泛的应用,是STL的关键所在,通过迭代器,容器和算法可以有机的粘合在一起,只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。在这里提到了一个叫迭代器的东西,说得简单一点,就是一种指针,学习C和C++的同学肯定不会对指针感到陌生,这确实是个让我们又爱又恨的东西。不曾忘记,因为指针操作引起的内存泄露、段错误而彻夜难眠;也不曾忘记,因为指针的灵活和强大,让我们自由地游刃在内存之中。以下以算法find为例,展示了容器、算法和迭代器如何合作:

template<typename InputIterator, typename T>
InputIterator find(InputIterator first, InputIterator last, const T &value)
{
    while (first != last && *frist != value)
        ++first;
    return first;
}

        从以上代码可以看到,算法通过传入的迭代器,顺序访问容器中的元素,寻找并返回符合条件的元素。通过向算法传入指向不同容器的迭代器,实现了算法以相同的逻辑对不同容器的访问。

二、 迭代器的重要特性

2.1 迭代器是一种智能指针

        与其说迭代器是一种指针,不如说迭代器是一种智能指针,它将指针进行了一层封装,既包含了原生指针的灵活和强大,也加上很多重要的特性,使其能发挥更大的作用以及能更好的使用。迭代器对指针的一些基本操作如*、->、++、==、!=、=进行了重载,使其具有了遍历复杂数据结构的能力,其遍历机制取决于所遍历的数据结构。下面上一段代码,了解一下迭代器的“智能”:

template<typename T>
class Iterator
{
public:
    Iterator& operator++();

    //...

private: 
    T *m_ptr;
};

       对于不同的数据容器,以上Iterator类中的成员函数operator++的实现会各不相同,例如,对于数组的可能实现如下:

//对于数组的实现
template<typename T>
Iterator& operator++()
{ 
    ++m_ptr; 
    retrun *this;
}

       对于链表,它会有一个类似于next的成员函数用于获取下一个结点,其可能实现如下:

//对于链表的实现
template<typename T>
Iterator& operator++()
{
    m_ptr = m_ptr->next();//next()用于获取链表的下一个节点 
    return *this;
}

        从上面三段代码可以看到,迭代器的operator++操作对于不同数据结构,就会有不同的实现,这是C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值