作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个自定义容器类和定义的迭代器,所以我可以这样做:
for (auto i : c)
但是有什么东西可以反向迭代吗?
类似:
for_reverse (auto i : c)
最佳答案
你可以使用boost:
#include <boost/range/adaptor/reversed.hpp>
using namespace boost::adaptors;
for (auto i : c | reversed)
...
或者如果你不喜欢运算符重载:
#include <boost/range/adaptor/reversed.hpp>
using namespace boost::adaptors;
for (auto i : reverse(c))
...
您可以使用 std::reverse_iterator 定义类似的辅助函数所以你不依赖boost:
template<typename It>
class Range
{
It b, e;
public:
Range(It b, It e) : b(b), e(e) {}
It begin() const { return b; }
It end() const { return e; }
};
template<typename ORange, typename OIt = decltype(std::begin(std::declval<ORange>())), typename It = std::reverse_iterator<OIt>>
Range<It> reverse(ORange && originalRange) {
return Range<It>(It(std::end(originalRange)), It(std::begin(originalRange)));
}
然后你可以写:
for (auto i : reverse(c))
...
关于c++ - 对于(自动我 : c) -- Is there a short way to do it in reverse direction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510091/
我是一名优秀的程序员,十分优秀!