迭代器¶
1 自定义可迭代类¶
在 C++ 中,自定义可迭代类(Iterable Class)可以通过实现迭代器(Iterator)来实现。迭代器是一个对象,用于遍历容器中的元素。通过实现迭代器,可以使自定义类支持范围 for
循环和其他基于迭代器的操作。
1.1 实现步骤¶
- 定义迭代器类:迭代器类需要实现
begin()
和end()
方法,并重载operator*
、operator++
和operator!=
等操作符。 - 定义容器类:容器类需要实现
begin()
和end()
方法,返回迭代器的实例。
1.2 示例代码¶
以下是一个简单的示例代码,展示了如何实现一个自定义的可迭代类:
#include <iostream>
#include <vector>
// 自定义容器类
class MyContainer {
public:
// 构造函数
MyContainer(const std::vector<int>& data) : data_(data) {}
// 迭代器类
class Iterator {
public:
// 构造函数
Iterator(std::vector<int>::const_iterator iter) : iter_(iter) {}
// 重载解引用操作符
const int& operator*() const {
return *iter_;
}
// 重载前置递增操作符
Iterator& operator++() {
++iter_;
return *this;
}
// 重载不等操作符
bool operator!=(const Iterator& other) const {
return iter_ != other.iter_;
}
private:
std::vector<int>::const_iterator iter_;
};
// 返回起始迭代器
Iterator begin() const {
return Iterator(data_.begin());
}
// 返回结束迭代器
Iterator end() const {
return Iterator(data_.end());
}
private:
std::vector<int> data_;
};
int main() {
std::vector<int> data = {1, 2, 3, 4, 5};
MyContainer container(data);
// 使用范围 for 循环遍历容器
for (int value : container) {
std::cout << value << " ";
}
std::cout << std::endl;
return 0;
}
1.3 代码解释¶
- 定义迭代器类:迭代器类
Iterator
实现了operator*
、operator++
和operator!=
操作符,用于解引用、递增和比较迭代器。 - 定义容器类:容器类
MyContainer
实现了begin()
和end()
方法,返回迭代器的实例。 - 使用范围
for
循环遍历容器:使用范围for (int value : container) { std::cout << value << " "; } std::cout << std::endl;
for
循环遍历MyContainer
容器,输出容器中的元素。
1.4 总结¶
通过实现迭代器类和容器类,可以使自定义类支持范围 for
循环和其他基于迭代器的操作。迭代器类需要实现 operator*
、operator++
和 operator!=
等操作符,容器类需要实现 begin()
和 end()
方法,返回迭代器的实例。理解这些概念和实现方法有助于编写更灵活和可扩展的 C++ 代码。
这只是一个简单的示例,实际上,迭代器设计可能会更加复杂,特别是在处理更复杂的数据结构时。如果你的类仅包含一个容器,你也可以考虑继承自 std::iterator
或使用 C++标准库的 std::begin
和 std::end
来简化迭代器的实现。