从原始指针(衰减的 C 样式数组)和大小生成范围::视图
Generating a ranges::view from a raw pointer (decayed C style array) and a size
使用C库中提供指针和大小的函数,是否有(或是否有(一种方法可以直接从中生成ranges::view? 据我了解,视图需要一个开始迭代器和一个哨兵,所以我是否必须将衰减的 C 数组的内容复制到向量中才能在这种情况下使用视图?
您不需要制作任何类型的副本。 除了范围,C++20 还将具有std::span
,它接受指针和大小并将其视为容器。 然后,您可以将其传递给所有范围函数。 那看起来像
std::size_t size;
auto ptr = c_function_call(&size); // or however you get the pointer and size from the c function
std::span container{ptr, size};
// use container with any view you want here
如果std::span
不可用,则可以利用指针是C++迭代器的事实。
给定一个指针p
和一个大小n
,你可以使用一对迭代器 [p
,p + n
( 来构造一个范围,使用ranges::subrange
:
void print(int i) { std::cout << i << " "; }
int values[6] = {0, 1, 2, 3, 4, 5};
// Example of a pointer and a size.
const int* ptr = values;
const std::size_t n = 3;
auto r = ranges::subrange(ptr, ptr + n);
ranges::for_each(r, print); // Prints: 0, 1, 2
工作示例:https://wandbox.org/permlink/eeIa96ieCb8GIQcM
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何从未知视图中声明范围::v3::View 变量
- 范围修剪视图实现不适用于反向视图
- 从函数返回范围视图时,带有std::span:中间对象所有权的C++Ranges-v3
- 在编译时何时计算范围::视图?
- 将视图范围设置为std::vector
- 使自定义范围 v3 视图可管道化
- 是否存在一个范围::视图::group_by对应项,它将所有元素都考虑在内,而不是只考虑连续的元素
- 从原始指针(衰减的 C 样式数组)和大小生成范围::视图
- C++20 范围的切片视图
- 使用范围V3视图来实现begin()/end()方法
- 范围视图作为数据成员
- 是否有范围::视图::转换的可修改视图版本
- 如何连接两个现有范围::视图
- GCC 的<实验/范围>过滤器视图不能使用无限范围 iota() 进行编译
- C 意外值类型的范围V3 partial_sum视图
- 规则迭代器(或类似的范围/视图类)是否应从const_iterator派生
- c++范围排序视图-如何创建const_iterator