【发布时间】:2012-07-19 19:43:38
【问题描述】:
我编写了一个简短的实用函数,一个对象来“包装”一个可迭代的容器,这样我就可以使用基于范围的for 向后遍历它。
template <typename Iterable>
struct ReverseWrapper {
private:
Iterable& m_iterable;
public:
ReverseWrapper(Iterable& iterable) : m_iterable(iterable) {}
auto begin() const ->decltype(m_iterable.rbegin()) {
return m_iterable.rbegin();
}
auto end() const ->decltype(m_iterable.rend()) {
return m_iterable.rend();
}
};
template <typename Iterable>
ReverseWrapper<Iterable> reverseIterate(Iterable& list) {
return ReverseWrapper<Iterable>(list);
}
这适用于 C++ 可迭代对象,但不适用于静态数组。对象需要什么才能支持使用基于范围的for 进行迭代?解决这个问题的最佳方法是什么?
【问题讨论】:
-
+1 我认为这将成为一个有用的标准组件。
-
只需调用它
reversed即可获得类似 Python 的函数:p -
为了完整起见,我已经编辑了我的答案以通过完美的转发和功能
rbegin和rend改进它。
标签: c++ arrays for-loop c++11 iterator