在C++中实现可迭代自定义容器需提供begin()和end()方法及符合指针行为的迭代器类,通过重载*、->、++、!=等操作符,使容器支持范围for循环和标准算法;示例MyVector容器结合普通迭代器与const迭代器,实现动态数组的STL风格遍历。

在C++中实现一个可迭代的自定义容器,关键在于提供迭代器支持和符合STL风格的接口。只要容器有begin()和end()方法,并且迭代器能正确遍历内部数据,就能用于范围for循环和标准算法。
定义容器基本结构
先设计一个简单的动态数组容器,比如MyVector:
template class MyVector {private: T* data; size_t size; size_t capacity;public:// 构造、析构等MyVector() : size(0), capacity(10) {data = new T[capacity];}
~MyVector() { delete[] data;}void push_back(const T& value) { if (size >= capacity) { // 简单扩容 capacity *= 2; T* new_data = new T[capacity]; for (size_t i = 0; i < size; ++i) new_data[i] = data[i]; delete[] data; data = new_data; } data[size++] = value;}size_t getSize() const { return size; }
};
实现迭代器类
迭代器本质是一个类,模拟指针行为。需要重载*、->、++、!=等操作符:
立即学习“C++免费学习笔记(深入)”;
template class MyVector { // ... 上面的成员public:// 嵌套迭代器类class iterator {private:T ptr;public:iterator(T p) : ptr(p) {}
T& operator*() { return *ptr; } T* operator->() { return ptr; } iterator& operator++() { ++ptr; return *this; } // 前缀++ iterator operator++(int) { // 后缀++ iterator tmp = *this; ++ptr; return tmp; } bool operator!=(const iterator& other) const { return ptr != other.ptr; } bool operator==(const iterator& other) const { return ptr == other.ptr; }};// begin 和 end 方法iterator begin() { return iterator(data); }iterator end() { return iterator(data + size); }
};
支持 const 迭代器(可选但推荐)
为了能在const对象上迭代,添加const_iterator:
class const_iterator {private: const T* ptr;public: const_iterator(const T* p) : ptr(p) {} const T& operator*() const { return *ptr; } const T* operator->() const { return ptr; } const_iterator& operator++() { ++ptr; return *this; } const_iterator operator++(int) { const_iterator tmp = *this; ++ptr; return tmp; } bool operator!=(const const_iterator& other) const { return ptr != other.ptr; } bool operator==(const const_iterator& other) const { return ptr == other.ptr; }};// 对应的 begin/endconst_iterator begin() const { return const_iterator(data); }const_iterator end() const { return const_iterator(data + size); }
测试使用
现在可以像STL容器一样使用:
#include int main() { MyVector vec; vec.push_back(10); vec.push_back(20); vec.push_back(30);// 范围for循环for (int x : vec) { std::cout << x << " ";}std::cout << "n";// 标准算法auto it = std::find(vec.begin(), vec.end(), 20);if (it != vec.end()) { std::cout << "Found: " << *it << "n";}
}
基本上就这些。核心是让begin()返回指向首元素的迭代器,end()返回指向末尾后一位的迭代器,迭代器类正确实现指针语义。这样你的自定义容器就能无缝集成到C++标准库生态中。
以上就是c++++怎么实现一个可以迭代的自定义容器_c++可迭代自定义容器实现方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477537.html
微信扫一扫
支付宝扫一扫