c++ 實現一個簡單迭代器
阿新 • • 發佈:2021-10-27
迭代器
- 為訪問容器提供統一介面
- 資料與演算法分離
為斐波那契數列實現一個簡單的迭代器
- 數列實現
檔案 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