迭代器概念
迭代器是一种抽象的设计概念,程序设计语言中并没有与之对应的实物。《设计模式》中对迭代器模式的定义如下:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。
STL
的中心思想是:将数据容器和算法分开,彼此独立设计,最后再使用胶着剂把他们撮合在一起(迭代器扮演胶着剂)。如Find
函数通过迭代器访问容器内的数据,而不关心数据是如何表示的。
#include <vector>
#include <list>
#include <iostream>
template <typename InputIterator, class T>
InputIterator Find(InputIterator first, InputIterator last, const T &value)
{
while (first != last && *first != value) {
++first;
}
return first;
}
int main()
{
std::vector<int> vi = {
1, 2, 3, 4, 5};
std::list<int> li = {
1, 2, 3, 4, 5};
auto it1 = Find(vi.begin(), vi.end(), 3);
if (it1 != vi.end()) {
std::cout << "found 3" << std::endl;
}
auto it2 = Find(li.begin(), li.end(), 3);
if (it1 != vi.end()) {
std::cout << "found 3" << std::endl;
}
return 0;
}
迭代器和指针
迭代器是一种行为类似于指针的对象,是对指针的封装,因此它最重要的编程工作就是重载operator*
和operator->
,当然有时还得重载operator++
、operator==
、operator!=
等。
单链表的迭代器
为了不向外暴露过多细节,每一种STL
容器都提供有自己专属的迭代器。
实现
class Node {
// 节点
public:
Node() : next_(nullptr)