C++迭代器设计模式
时间: 2023-07-13 22:05:20 浏览: 151
C++设计模式之迭代器模式(Iterator)
5星 · 资源好评率100%
迭代器模式是一种行为型设计模式,它允许客户端通过统一的接口来访问集合中的元素,而不用暴露该集合的底层表示。
在 C++ 中,STL(Standard Template Library)提供了迭代器模式的实现。STL 中定义了五种类型的迭代器:输入迭代器、输出迭代器、正向迭代器、双向迭代器、随机访问迭代器,它们分别对应不同的迭代器行为和性能。
在实现自己的迭代器时,需要定义一个迭代器类,该类应该包含迭代器相关的操作,如:`operator++()`(前缀和后缀版本)、`operator*()`、`operator->()`等。此外,还需要定义迭代器类型别名,如:`value_type`、`iterator_category`、`difference_type`等,它们用于标识迭代器的属性和特征。
以下是一个简单的迭代器类的示例:
```cpp
template<typename T>
class MyIterator {
public:
using iterator_category = std::forward_iterator_tag;
using value_type = T;
using difference_type = std::ptrdiff_t;
using pointer = T*;
using reference = T&;
MyIterator(pointer ptr) : m_ptr(ptr) {}
reference operator*() const {
return *m_ptr;
}
pointer operator->() const {
return m_ptr;
}
MyIterator& operator++() {
++m_ptr;
return *this;
}
MyIterator operator++(int) {
MyIterator temp = *this;
++(*this);
return temp;
}
bool operator==(const MyIterator& other) const {
return m_ptr == other.m_ptr;
}
bool operator!=(const MyIterator& other) const {
return !(*this == other);
}
private:
pointer m_ptr;
};
```
在上述示例中,我们定义了一个指向类型为 `T` 的对象的迭代器类 `MyIterator`,该类包含了迭代器相关的操作和属性。其中,`iterator_category` 属性用于标识迭代器的类型,`value_type` 属性表示迭代器所指对象的类型,`difference_type` 属性表示两个迭代器之间的距离(以整型表示),`pointer` 属性表示迭代器所指对象的指针类型,`reference` 属性表示迭代器所指对象的引用类型。
除了属性之外,我们还定义了构造函数、解引用操作符、箭头操作符、前缀和后缀版本的自增操作符、相等和不等操作符等迭代器操作。
使用自定义的迭代器类时,需要按照 STL 的迭代器接口来使用它,例如:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
MyIterator<int> begin = v.begin();
MyIterator<int> end = v.end();
for (auto it = begin; it != end; ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
```
在上述示例中,我们使用自定义的迭代器类 `MyIterator` 来遍历一个 vector 容器,并输出容器中的元素。需要注意的是,我们使用了 STL 中的迭代器接口 `begin()` 和 `end()` 来获取容器的起始和结束迭代器,并将它们作为自定义迭代器的构造函数参数。然后,我们使用自定义迭代器来遍历容器,并输出容器中的元素。
阅读全文