答案:通过定义嵌套迭代器类并重载解引用、自增和比较操作符,C++中可实现类似STL的迭代器模式,使自定义容器支持统一遍历;示例中MyVector提供begin()/end()方法返回迭代器,实现与范围for循环兼容,提升代码通用性与可维护性。

在C++中实现迭代器模式,可以让不同类型的集合以统一的方式被遍历,提升代码的通用性和可维护性。通过定义标准接口,用户无需关心集合内部结构,只需使用迭代器访问元素。
迭代器模式将数据的访问与存储分离,提供一种统一方式顺序访问集合中的元素,而不暴露其底层表示。在C++中,通常通过类模板和操作符重载来模拟STL风格的迭代器行为。
关键点包括:
以下是一个固定数组容器 MyVector 及其迭代器的实现示例:
立即学习“C++免费学习笔记(深入)”;
template<typename T>
class MyVector {
private:
T* data;
size_t size_;
size_t capacity_;
<p>public:
// 迭代器类定义
class iterator {
private:
T<em> ptr;
public:
iterator(T</em> p) : ptr(p) {}
T& operator<em>() { return </em>ptr; }
iterator& operator++() { ++ptr; return *this; }
bool operator!=(const iterator& other) const { return ptr != other.ptr; }
};</p><pre class='brush:php;toolbar:false;'>MyVector(size_t cap = 10) : size_(0), capacity_(cap) {
data = new T[capacity_];
}
~MyVector() {
delete[] data;
}
void push_back(const T& value) {
if (size_ < capacity_)
data[size_++] = value;
}
iterator begin() { return iterator(data); }
iterator end() { return iterator(data + size_); }};
这个实现中,iterator 是 MyVector 的嵌套类,封装了原始指针,并重载必要的操作符。使用者可以用范围for循环或传统while方式遍历:
MyVector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
<p>for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
// 输出:1 2 3</p>C++11起,只要类提供 begin() 和 end() 成员函数(或可用的自由函数),即可用于基于范围的for循环。上面的 MyVector 已满足条件:
for (int x : vec) {
std::cout << x << " ";
}
编译器会自动调用 vec.begin() 和 vec.end(),并控制迭代过程。这使得接口简洁,且与STL容器用法一致。
为支持更多场景,可进一步完善迭代器:
例如添加 const 迭代器:
class const_iterator {
const T* ptr;
public:
const_iterator(const T* p) : ptr(p) {}
const T& operator*() const { return *ptr; }
const_iterator& operator++() { ++ptr; return *this; }
bool operator!=(const const_iterator& other) const { return ptr != other.ptr; }
};
<p>const_iterator begin() const { return const_iterator(data); }
const_iterator end() const { return const<em>iterator(data + size</em>); }</p>基本上就这些。通过合理设计迭代器接口,C++中的自定义集合可以像STL容器一样自然地被遍历和使用,实现遍历操作的标准化。关键是操作符重载和清晰的 begin/end 语义。不复杂但容易忽略细节。
以上就是C++迭代器模式实现 集合遍历标准化的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号