概述
迭代器模式被STL大量使用,熟悉c++的一般都用得很多,它提供了一种统一且便捷的对不同容器遍历的形式,使得学习和使用语言变得很简单。
代码实现
class Iterator {
public:
Iterator(int *data) : data_(data), index_(0) {}
Iterator(int *data, int i) : data_(data), index_(i) {}
Iterator Prev() {
if (index_ > 0)
return Iterator(data_, index_ - 1);
return Iterator(data_, index_);
};
Iterator Next() { return Iterator(data_, index_ + 1); };
int operator*() { return data_[index_]; }
protected:
int index_ = 0;
int *data_;
};
class MyVector {
public:
MyVector(int s) : size_(s) {
data_ = new int[size_];
for (int i = 0; i < size_; ++i) {
data_[i] = i;
}
}
Iterator begin() { return Iterator(data_, 0); }
Iterator end() { return Iterator(data_, size_ - 1); }
private:
int *data_;
int size_;
};
int main() {
MyVector my_vector(3);
Iterator iter = my_vector.begin();
std::cout << *iter << std::endl;
iter = iter.Next();
std::cout << *iter << std::endl;
iter = iter.Next();
std::cout << *iter << std::endl;
}
简单来看就是这样了,STL中使用模板,接口实现更完善,基本思想就是每种容器定义自己的pointer,在其中实现各自遍历的next接口或++等接口,再将各自的pointer作为typename传入模板类iterator,从而实现了一种公共的迭代器,但实际上各容器的iterator实现都不同。