如何在c++中为自己的集合类添加foreach迭代支持?
How do I add foreach iteration support to my own collection class in C++?
我创建了一个集合类型的c++实现。我想添加迭代支持,以便开发人员可以在其上使用"for each"语句。我该怎么做呢?
标准成语是:公开iterator
和const_iterator
类型,并提供begin()
和end()
两个最小函数:
template</*.....*/>
class Collection
{
public:
typedef /*...*/ iterator;
typedef /*...*/ const_iterator;
iterator begin();
iterator end();
const_iterator begin() const;
const_iterator end() const;
};
一旦你实现了这些,你的集合就可以在std::for_each
中使用,以及在<algorithm>
中定义的许多其他算法函数中使用。
假设您指的是for_each
算法,您只需要一些代表标准begin
和end
容器方法的东西:到逻辑容器的第一个点和第一次结束点的迭代器。
如果你指的是STL的for_each
算法,你只需要像STL容器那样定义begin()
和end()
。
如果你指的是c++ 0x基于范围的for循环,那么你可以做同样的事情。
using namespace std;
// very very simple container class
class Cont {
public:
Cont() {}
typedef char* iterator;
iterator begin() {return arr;}
iterator end() {return &arr[200];}
private:
char arr[200];
};
void setit(char &it) {
it = 'a';
}
// iterator must provide ++ operation for for_each algorithm (char* in this example works this way)
int main() {
Cont c;
for_each(c.begin(), c.end(), setit);
copy(c.begin(), c.end(), ostream_iterator<char>(cout, ","));
return 0;
}
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 没有显式声明的int[]中的foreach
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- c++使用foreach使数组为null
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 如何在c++中为自己的集合类添加foreach迭代支持?