gpt4 book ai didi

c++ - 对于(自动我 : c) -- Is there a short way to do it in reverse direction?

转载 作者:IT老高 更新时间:2023-10-28 12:33:25 25 4
gpt4 key购买 nike

我有一个自定义容器类和定义的迭代器,所以我可以这样做:

for (auto i : c)

但是有什么东西可以反向迭代吗?

类似:

for_reverse (auto i : c)

最佳答案

  1. 你可以使用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))
    ...
  2. 您可以使用 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))
    ...

    Example

关于c++ - 对于(自动我 : c) -- Is there a short way to do it in reverse direction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com