c++ 实现一个简单迭代器

迭代器

  • 为访问容器提供统一接口
  • 数据与算法分离

为斐波那契数列实现一个简单的迭代器

  • 数列实现
文件 Fibo.h
#ifndef HEAD_FIBO
#define HEAD_FIBO

#include <vector>
#include "FiboIterator.h"

class Fibo
{
private:
    static std::vector<int> _elems;
    friend int FiboIterator::operator*(); // 友元支持

public:
    Fibo(int size);
    ~Fibo();
    typedef FiboIterator iterator;     // 嵌套类型  

    FiboIterator begin();
    FiboIterator end();
    void display();
};

#endif
文件 Fibo.cpp
#include "Fibo.h"
#include "FiboIterator.cpp"

std::vector<int> Fibo::_elems;
Fibo::Fibo(int size)
{
    for (int i = _elems.size(); i < size; i++)
    {
        if (i < 2)
            _elems.push_back(1);
        else
            _elems.push_back(_elems[i - 1] + _elems[i - 2]);
    }
}

Fibo::~Fibo()
{
}

FiboIterator Fibo::begin()
{
    return FiboIterator(0);
}

FiboIterator Fibo::end()
{
    return FiboIterator(_elems.size());
}

void Fibo::display()
{
    for (auto &&i : _elems)
    {
        std::cout << i << "  ";
    }
    std::cout << std::endl;
}
  • 迭代器实现

    文件 FiboIterator.h
    
    #ifndef HEAD_FIBOITERATOR
    #define HEAD_FIBOITERATOR
    
    class FiboIterator
    {
    private:
        int _index;
    
    public:
        FiboIterator(int);
        ~FiboIterator();
    
        bool operator==(const FiboIterator &rhs);
        bool operator!=(const FiboIterator &rhs);
        int operator*();
        FiboIterator &operator++();
        FiboIterator operator++(int);
    };
    
    #endif
    
    文件 FiboIterator.cpp
    
    #include "FiboIterator.h"
    
    class Fibo;
    FiboIterator::FiboIterator(int index) : _index(index - 1)
    {
    }
    
    FiboIterator::~FiboIterator()
    {
    }
    
    bool FiboIterator::operator==(const FiboIterator &rhs)
    {
        return (rhs._index == this->_index);
    }
    
    bool FiboIterator::operator!=(const FiboIterator &rhs)
    {
        return (rhs._index != this->_index);
    }
    int FiboIterator::operator*()
    {
        return Fibo::_elems[_index + 1];
    }
    
    FiboIterator &FiboIterator::operator++()
    {
        _index++;
        return *this;
    }
    
    FiboIterator FiboIterator::operator++(int)
    {
        FiboIterator temp = *this;
        _index++;
        return temp;
    }
    
    测试 main.cpp
    
    #include "Fibo.h"
    #include "Fibo.cpp"
    
    int main()
    {
        Fibo fb(5);
        fb.display();
    
        for (Fibo::iterator it = fb.begin(); it != fb.end(); it++)
        {
            std::cout << "fb:" << *it << std::endl;
        }
    }
    

    == end

posted @ 2021-10-27 13:12  一三五  阅读(198)  评论(0)    收藏  举报