【发布时间】:2014-02-02 22:58:22
【问题描述】:
在 c++ 11 中,您可以使用范围 for 循环遍历容器:
for (auto i : vec) { /* do stuff */ }
除了反向迭代不那么明显的缺点(C++11 reverse range-based for-loop)之外,它还受到无法为迭代定义自定义步骤这一事实的限制。
有办法吗?我无法理解它,但想象一下像
这样的适配器template<typename T>
struct step
{
T const &container;
step( T const &cont, int aStep);
// provide begin() / end() member functions
// maybe overload the ++ operator for the iterators ?
};
for (auto i : step(vec, i)) {}
编辑:
讨论是关于实现类似于 Python 生成器https://wiki.python.org/moin/Generators 的语义,例如 range() 函数。请不要对这将如何增加代码复杂性做出毫无意义的 cmets,没有人会回头用 Python 编写 for 循环,即使在 C++ 中不是这种情况(我应该再说一遍:不是这种情况在 c++ 中)我想探索编写方法
for (auto i : range(vec, step))
因为新标准提供了使用这种语法的工具。 range() 函数将是一次性的工作,代码的用户不必担心实现的细节
【问题讨论】:
-
对于每一个
operator++(),在底层迭代器上执行n次。
标签: c++