为单链表实现一个迭代器

本文介绍了迭代器的概念,作为设计模式的一种,其主要作用是分离数据容器和算法。迭代器行为类似于指针,但封装了更多操作。接着讨论了迭代器与指针的区别,并详细说明了如何为单链表设计并实现迭代器,包括迭代器的解引用、加法运算符重载以及迭代器的比较。最后展示了完整的代码实现,并进行了测试。
摘要由CSDN通过智能技术生成

迭代器概念

迭代器是一种抽象的设计概念,程序设计语言中并没有与之对应的实物。《设计模式》中对迭代器模式的定义如下:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式

STL的中心思想是:将数据容器算法分开,彼此独立设计,最后再使用胶着剂把他们撮合在一起(迭代器扮演胶着剂)。如Find函数通过迭代器访问容器内的数据,而不关心数据是如何表示的。

#include <vector>
#include <list>
#include <iostream>

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

int main()
{
   
    std::vector<int> vi = {
   1, 2, 3, 4, 5};
    std::list<int> li = {
   1, 2, 3, 4, 5};

    auto it1 = Find(vi.begin(), vi.end(), 3);
    if (it1 != vi.end()) {
   
        std::cout << "found 3" << std::endl;
    }

    auto it2 = Find(li.begin(), li.end(), 3);
    if (it1 != vi.end()) {
   
        std::cout << "found 3" << std::endl;
    }

    return 0;
}

在这里插入图片描述

迭代器和指针

迭代器是一种行为类似于指针的对象,是对指针的封装,因此它最重要的编程工作就是重载operator*operator->,当然有时还得重载operator++operator==operator!=等。

单链表的迭代器

为了不向外暴露过多细节,每一种STL容器都提供有自己专属的迭代器

实现

class Node {
    // 节点
public:
    Node() : next_(nullptr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值