C++20 范围 - 如何修改范围?
C++20 ranges - how to modify a range?
我有一个向量定义为:
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 操作。我是否遗漏了一个 header,如果是,哪个不是在 C++20 中实现的?
我也试过:
tmp.push_back(99.99);
但这也不起作用。
我想坚持使用 C++20 实现而不是使用 ranges
库,tmp
的类型可以是完全不同的东西,例如另一种类型或 action/range.
best/most 这样做的有效方法是什么?
However, I'd like to convert the view data into ... another vector so that I can modify it.
您可以使用接受一对迭代器的 std::vector 的构造函数:
template< class InputIt >
constexpr vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
std::ranges::action::push_back(tmp, 99.99);
but the push_back action isn't recognised. Am I missing a header, if so, which one or isn't this implemented in C++20?
标准库没有 ranges::action
。您可以改用成员函数:
tmp.push_back(99.99);
I've also tried:
tmp.push_back(99.99);
but this doesn't work either.
我看不出为什么这不起作用。我建议考虑一下您期望它做什么以及为什么期望它。
我有一个向量定义为:
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 操作。我是否遗漏了一个 header,如果是,哪个不是在 C++20 中实现的?
我也试过:
tmp.push_back(99.99);
但这也不起作用。
我想坚持使用 C++20 实现而不是使用 ranges
库,tmp
的类型可以是完全不同的东西,例如另一种类型或 action/range.
best/most 这样做的有效方法是什么?
However, I'd like to convert the view data into ... another vector so that I can modify it.
您可以使用接受一对迭代器的 std::vector 的构造函数:
template< class InputIt >
constexpr vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
std::ranges::action::push_back(tmp, 99.99);
but the push_back action isn't recognised. Am I missing a header, if so, which one or isn't this implemented in C++20?
标准库没有 ranges::action
。您可以改用成员函数:
tmp.push_back(99.99);
I've also tried:
tmp.push_back(99.99);
but this doesn't work either.
我看不出为什么这不起作用。我建议考虑一下您期望它做什么以及为什么期望它。