在 C++ 中,要自定义一个迭代器,需要遵循一些基本原则和实现特定的成员函数
class MyIterator {
public:
// 构造函数
MyIterator(/*...*/) {
// 初始化迭代器
}
// 解引用符号"*"重载
typename MyContainer::value_type& operator*() {
// 返回当前元素的引用
}
// 箭头操作符 "->" 重载(可选)
typename MyContainer::value_type* operator->() {
return &operator*();
}
// 前置递增操作符 "++" 重载
MyIterator& operator++() {
// 将迭代器移动到下一个元素
return *this;
}
// 后置递增操作符 "++" 重载(可选)
MyIterator operator++(int) {
MyIterator temp(*this);
++(*this);
return temp;
}
// 比较操作符 "==" 和 "!=" 重载
bool operator==(const MyIterator& rhs) const {
// 检查两个迭代器是否相等
}
bool operator!=(const MyIterator& rhs) const {
return !(*this == rhs);
}
private:
// 保存迭代器内部状态的变量
};
class MyContainer {
public:
typedef MyIterator iterator;
// 返回指向容器第一个元素的迭代器
iterator begin() {
// 创建并返回指向第一个元素的迭代器
}
// 返回指向容器尾部(最后一个元素之后的位置)的迭代器
iterator end() {
// 创建并返回指向尾部的迭代器
}
// 其他容器相关的成员函数
};
MyContainer container;
for (MyContainer::iterator it = container.begin(); it != container.end(); ++it) {
// 访问元素:*it
}
注意:这里给出的代码仅作为示例,实际实现时需根据具体情况进行修改。例如,根据容器的数据结构和实现方式,可能需要在迭代器类中添加更多的成员函数和变量。