【发布时间】:2019-06-06 20:16:55
【问题描述】:
我只需要为成员元素创建一个迭代器来遍历容器。
例如:
class A { int x; char y; };
std::vector<A> mycoll = {{10,'a'}, {20,'b'}, {30,'c'} };
这里mycoll.begin()会给我A类型的迭代器
但我需要编写迭代器来迭代特定成员(比如 x A.x)并让 int_ite 成为该整数的迭代器。
那我需要
*(int_ite.begin() ) 返回 10
*(++int_ite.begin() ) 返回 20
等等
.end() 也会结束迭代。
有没有什么优雅的方法可以创建这样一个迭代器?
我要求它传递给std::lower_bound()
【问题讨论】:
-
你不能使用
int_ite.begin()->x? -
您在创建迭代器时究竟发现了什么问题?你试过写迭代器了吗?
-
确定可以实现类似迭代器的东西,只返回字段 x,但如此奇怪和复杂
-
对于
std::lower_bound,您也不需要它,自定义比较器可以完成这项工作。 -
旁注:如果您发现自己确实需要这样做,Mooing Duck has an excellent piece 了解如何开始制作容器及其迭代器。