这是我要编写的代码:
#include <algorithm>
#include <ranges>
#include <vector>
#include <iostream>
int main() {
std::vector<int> v {1, 2, 3, 4};
std::vector<int> u (4);
std::ranges::copy(v, u.begin()); // OK
// std::ranges::copy(v + 2, u.begin()); // FAIL
for (auto n : u) {
std::cout << n << ' ';
}
}
问题是-如何从起始迭代器创建子范围并将其传递给范围受约束的STL算法?
最佳答案
您可以分别通过使用 views::take
或 views::drop
来获得范围的左侧或右侧:
std::ranges::copy(v | std::ranges::views::take(2), // left side
u.begin());
std::ranges::copy(v | std::ranges::views::drop(2), // right side
u.begin());
这是demo。通常,您还可以使用std::ranges::subrange,它使您可以从迭代器和哨兵值创建子范围:
std::ranges::copy(std::ranges::subrange(v.begin() + 2, v.end()),
u.begin());
这是demo。
关于c++ - C++ 20:左半部分或右半部分是否有子范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63523624/