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

浙公网安备 33010602011771号