/**
《迭代器模式》
迭代器模式是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素。
迭代器模式的主要思想是将集合的遍历行为抽取为单独的迭代器对象。
如果你希望代码能够遍历不同的甚至是无法预知的数据结构, 可以使用迭代器模式。
*/
#include <iostream>
#include <vector>
#include <string>
// 迭代器类,使用模板代替继承接口的实体类
template<typename T, typename U>
class Iterator
{
typedef typename std::vector<T>::iterator iterator_type;
private:
iterator_type my_it_; // 迭代器
U *my_data_p_; // 集合指针
public:
Iterator(U *my_data_p, bool reverse = false) : my_data_p_(my_data_p)
{
my_it_ = my_data_p_->my_data_.begin();
}
void First()
{
my_it_ = my_data_p_->my_data_.begin();
}
void Next()
{
my_it_++;
}
bool IsDone()
{
return my_it_ == my_data_p_->my_data_.end();
}
iterator_type Current()
{
return my_it_;
}
};
// 集合类,使用模板代替继承接口的实体类
template <typename T>
class Container
{
friend class Iterator<T, Container>;
private:
std::vector<T> my_data_;
public:
void Add(T t)
{
my_data_.push_back(t);
}
Iterator<T, Container> *CreateIterator()
{
return new Iterator<T,Container>(this);
}
};
// 模拟一个类出来
class Data
{
private:
int my_data_;
public:
Data(int a = 0) : my_data_(a) {}
void SetData(int a)
{
my_data_ = a;
}
int GetData()
{
return my_data_;
}
};
int main()
{
// 新建一个容器
// Container<int> container;
// for (int i = 0; i < 10; ++i)
// {
// container.Add(i); // 往容器放东西
// }
// auto it = container.CreateIterator();
// for (it->First(); !it->IsDone(); it->Next())
// {
// std::cout << *(it->Current()) << std::endl;
// }
Container<Data> container;
for (int i = 0; i < 10; ++i)
{
container.Add(Data(i));
}
auto it = container.CreateIterator();
for (it->First(); !it->IsDone(); it->Next())
{
std::cout << (*it->Current()).GetData() << std::endl;
}
}
C++迭代器模式
最新推荐文章于 2024-05-02 15:42:44 发布