如何解决C++20 范围 - 如何修改范围?
我有一个向量定义为:
auto xs = std::vector<double>(5) = { 1.0,2.0,3.0,4.0,5.0 };
我已经在这个向量上创建了一个视图:
auto vi = xs | std::ranges::views::drop(1);
例如。但是,我想将视图数据转换为可操作的范围或其他向量,以便我可以对其进行修改。
到目前为止,我已经尝试过:
#include <ranges>
#include <algorithm>
auto tmp = std::vector<double>();
std::ranges::copy_n(std::ranges::rbegin(vi),std::ranges::size(vi) - 1,std::back_inserter(tmp));
std::ranges::action::push_back(tmp,99.99);
但无法识别 push_back 操作。我是否缺少头文件(如果有),在 C++20 中是否实现了哪一个?
我也试过:
tmp.push_back(99.99);
但这也不起作用。
我想坚持使用 C++20 实现而不是使用 ranges
库,tmp
的类型可以是完全不同的东西,例如另一种类型或操作/范围。
请问,最好/最有效的方法是什么?
解决方法
但是,我想将视图数据转换为...另一个向量,以便我可以对其进行修改。
您可以使用接受一对迭代器的 std::vector 构造函数:
template< class InputIt >
constexpr vector( InputIt first,InputIt last,const Allocator& alloc = Allocator() );
std::ranges::action::push_back(tmp,99.99);
但无法识别 push_back 操作。我是否缺少头文件(如果有),在 C++20 中是否实现了哪一个?
标准库没有 ranges::action
。您可以改用成员函数:
tmp.push_back(99.99);
我也试过:
tmp.push_back(99.99);
但这也不起作用。
我看不出为什么这行不通。我建议您考虑一下您希望它做什么以及您为什么希望这样做。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。