首页 > 后端开发 > C++ > 如何使用 Boost.Range 反转 C 中基于范围的 For 循环?

如何使用 Boost.Range 反转 C 中基于范围的 For 循环?

Mary-Kate Olsen
发布: 2024-12-08 18:11:15
原创
681 人浏览过

How Can I Reverse a Range-Based For-Loop in C   Using Boost.Range?

使用 Boost.Range 在 C 11 中反转基于范围的 For 循环

在 C 中,基于范围的 for 循环是用于迭代容器的强大工具。但是,默认情况下,它从容器的开头迭代到结尾。有没有办法反转这个方向?

使用基于范围的 For 循环反向迭代器

反向迭代容器的一种方法是使用rbegin() 和 rend() 成员函数。然而,这需要使用显式迭代器,并且对于复杂的场景可能会变得笨拙:

for (auto i = c.rbegin(); i != c.rend(); ++i) { ... }
登录后复制

Boost.Range 的反向适配器

幸运的是,Boost.Range 提供了一个使用 boost::adaptors::reverse 适配器的优雅解决方案。该适配器包装一个容器并反转其迭代器的方向。这允许与基于范围的 for 循环无缝集成:

for (auto& i : boost::adaptors::reverse(c)) { ... }
登录后复制

使用示例

这里是使用 boost::adaptors::reverse 进行迭代的示例反向列表顺序:

#include <list>
#include <iostream>
#include <boost/range/adaptor/reversed.hpp>

int main() {
    std::list<int> x{2, 3, 5, 7, 11, 13, 17, 19};
    for (auto i : boost::adaptors::reverse(x)) {
        std::cout << i << '\n';
    }
    for (auto i : x) {
        std::cout << i << '\n';
    }
    return 0;
}
登录后复制

输出:

19
17
13
11
7
5
3
2
2
3
5
7
11
13
17
19
登录后复制

以上是如何使用 Boost.Range 反转 C 中基于范围的 For 循环?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板