C++中,STL list容器的迭代器实现
时间: 2024-02-06 18:40:09 浏览: 39
STL中的list容器是一个双向链表,因此它的迭代器也是一个双向迭代器。
list迭代器的定义如下:
```c++
template <typename T>
class list {
public:
// ...
class iterator {
public:
typedef T value_type;
typedef T& reference;
typedef T* pointer;
typedef std::ptrdiff_t difference_type;
typedef std::bidirectional_iterator_tag iterator_category;
iterator();
iterator(Node* node);
iterator(const iterator& other);
iterator& operator=(const iterator& other);
reference operator*();
pointer operator->();
iterator& operator++();
iterator operator++(int);
iterator& operator--();
iterator operator--(int);
bool operator==(const iterator& other) const;
bool operator!=(const iterator& other) const;
private:
Node* _node;
};
};
```
其中,`Node`是链表中的节点,存储了值和指向前后节点的指针。
迭代器本身包含一个指向节点的指针 `_node`,它的解引用操作返回节点的值,而 `operator++` 和 `operator--` 操作则分别将 `_node` 移动到下一个和上一个节点。
需要注意的是,`operator++` 和 `operator--` 都有两个版本,一个是前置版本,一个是后置版本,它们的区别在于是否返回移动前的迭代器。
使用list迭代器非常简单,可以像下面这样遍历一个list:
```c++
list<int> my_list = {1, 2, 3, 4};
for (auto it = my_list.begin(); it != my_list.end(); ++it) {
std::cout << *it << " ";
}
```