如何解决VS2019 中的 C++20 范围反向视图问题最新
我正在尝试使用 ranges::subrange
视图以相反的顺序读取向量,但我对它应该如何工作感到困惑。我知道 ranges::reverse
,但我尽量避免将此方法用作个人偏好和学习经验。
#include <algorithm>
#include <ranges>
#include <vector>
#include <iostream>
int main() {
using namespace std::ranges;
std::vector<int> v {1,2,3,4};
const auto [first,last] = range(v.rbegin(),v.rend());
auto view = subrange(first,last - 1);
for (auto n : view) {
std::cout << n << ' ';
}
}
这就是我想象的它应该如何工作,但很明显,我的想象与现实之间存在距离。在一些在线示例中,我看到 ranges::equal_range
用于设置 [first,last]
迭代器,但我对匹配任何值不感兴趣,只是将迭代器设置为 rbegin 和 rend。
我应该使用什么 range 命令来定义 [first,last]
迭代器或者我应该如何正确使用 range 命令?
解决方法
鉴于您想要 4、3、2,您正在寻找:
v | views::drop(1) | views::reverse
也就是说,drop
第一个元素(1
),然后是 reverse
余数。
如果你真的想避免使用范围适配器,你可以这样做:
subrange(v.rbegin(),v.rend() - 1)
完成同样的事情。 subrange
所做的只是将两个迭代器(或一个迭代器和一个哨兵)组合到一个范围内。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。