是否可以在类内部使用视图来实现 begin() / end() 方法?
例如,我想让以下类可迭代;在每次迭代时,都会
op
在两个可迭代对象的当前元素上调用。
template <typename It1, typename It2, typename Op>
struct binary_op {
binary_op(It1 const& f, It2 const& s, Op o): first{f}, second{s}, op{o} {}
It1 first;
It2 second;
Op op;
};
感谢 range-v3,我可以使用zip_with
视图(代码未经测试!)
ranges::view::zip_with(op, first, second);
但是我可以使用这个视图实现 begin() / end() 方法吗?
using namespace ranges;
template <typename It1, typename It2, typename Op>
struct binary_op {
...
auto begin() const {
return view::zip_with(op, first, second).begin();
}
auto end() const {
return view::zip_with(op, first, second).end();
}
};
可以安全地比较两个迭代器(开始和结束)吗?
我想要实现的最终结果是可以嵌套任意数量的 binary_op:
std::vector<int> v1, v2, v3;
auto r = binary_op(
binary_op(v1, v2, [](int a, int b) {return a + b;}),
v3,
[](int a, int b) {return a - b;});
for (auto x : r) { ... }