自定义集合中每个的C++
C++ for each in on custom collections
因此,自从它被引入以来,我一直喜欢关键字中的for each
来迭代STL collections
。(我非常非常喜欢句法糖)。
我的问题是如何编写一个可以使用这些关键字迭代的自定义集合?
本质上,我需要公开什么APi才能使用这些关键字使我的集合可迭代?
如果这听起来很直白,我很抱歉,但请不要用"使用boost"、"不要写你自己的收藏"等回应。追求知识,我的朋友们。如果不可能的话,嘿,我可以应付。
我也非常希望不必在我的集合中注入STL迭代器。
提前感谢!
以下是对可迭代数据结构(基于范围的循环)的一个很好的解释:
为了使数据结构可迭代,它必须与现有的STL迭代器类似地工作。
- 必须存在对该结构进行操作的CCD_ 3和CCD_,作为成员或独立函数,并将迭代器返回结构的开始和结束
- 迭代器本身必须支持
operator*
方法、operator !=
方法和operator++
方法,无论是作为成员还是作为独立函数
注意,在C++11
中,集成了对不使用STL
的基于范围的循环的支持,尽管上述条件也适用。你可以在上面的同一个链接上阅读。
从您的问题中还不清楚您谈论的是<algorithm>
标头中定义的std::for_each
,还是C++11中引入的基于范围的for循环。
然而,两者的答案是相似的。
两者都在迭代器上操作,而不是在集合本身上操作。
所以你需要
-
定义一个迭代器类型,它满足STL(实际上是C++标准)对它的要求。(主要是它必须定义
operator++
和operator*
,以及一些其他操作和类型定义) -
对于
std::for_each
,不存在2。你完了。您只需将两个这样的迭代器传递给std::for_each
。对于基于范围的For循环,需要通过begin()
和end()
函数公开一对这样的迭代器。
而且。。。就是这样。
唯一棘手的部分是真正创建一个符合要求的迭代器。Boost(尽管你说你不想使用它)有一个库,可以帮助实现自定义迭代器(Boost.Iterator)。还有std::iterator
类,它是自定义迭代程序实现的基类。但这两者都不是所必需的。两者都只是方便工具,可以更容易地创建自己的迭代器。
- 处理多个异常集合的C++方法
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 如何将ampl中的集合表示为c++中的向量
- 检查值是否在集合p1和p2中,但不在p3中
- 带过滤器的现代迭代c++集合
- 如何将结构插入到集合中并打印集合的成员
- 集合上的输出迭代器:assign和increment迭代器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 实现一个在集合上迭代的模板函数
- 尝试使用集合函数时出现分段错误
- 互斥指针的集合
- c++找不到具有相同哈希的无序集合元素
- python集合的C++等价物是什么.计数器
- 如何在C++中递归地按相反顺序打印集合
- Python 集合.计数器,如何避免重复查找
- 如何写向量的无序向量集,即unordered_set<向量<向量<int>>集合?
- 从具有自定义排序的向量创建集合
- 显示字符串的集合和子集
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 有没有办法在 c++ 中按更大的 int 和更小的对对 int 和对的集合进行排序?