用簡單的自行建構的代碼,演示iterator<input_iterator_tag, int>它派生的原理
时间: 2024-10-20 12:19:13 浏览: 25
自定义迭代器是一种用于遍历容器数据结构的技术,它通常继承自标准库中的`std::input_iterator_tag`和实现了必要的函数,如`*this++`和`*this`,以便支持迭代操作。这里是一个简单的C++11风格的自定义迭代器例子,假设我们有一个名为`MyContainer`的简单容器,里面存储整数:
```cpp
#include <iostream>
#include <iterator>
// 假设 MyContainer 存储整数
class MyContainer {
public:
std::vector<int> data; // 容器实例
class Iterator : public std::input_iterator_tag {
private:
size_t index;
public:
explicit Iterator(size_t idx = 0) : index(idx) {}
// 迭代器解引用返回当前元素
int operator*() const { return data[index]; }
// 进行前进一步,指向下一个元素
Iterator& operator++() {
if (index < data.size()) ++index;
else index = data.size(); // 遍历完后,结束迭代
return *this;
}
// 检查是否还有元素可以迭代
bool operator!=(const Iterator& other) const {
return index != other.index;
}
};
};
int main() {
MyContainer my_container;
my_container.data.push_back(1);
my_container.data.push_back(2);
my_container.data.push_back(3);
// 使用自定义迭代器遍历
for (auto it : MyContainer::Iterator(my_container.data.begin())) {
std::cout << *it << " ";
}
return 0;
}
```
在这个例子中,`MyContainer`的`Iterator`类继承了`std::input_iterator_tag`,并实现了基本的迭代器功能,如访问值(`operator*`)、移动到下一个元素(`operator++`)以及判断迭代是否结束(`!=`)。然后在`main()`函数中,我们可以直接将这个迭代器用于`for`循环,就像处理标准库提供的迭代器一样。
阅读全文