是否可以在C++中获取 std::array 的子数组
Is it possible to get a sub-array of a std::array in C++?
我想做类似的事情
std::array<int, 5> array1 = {{ ... }};
const std::array<int, 3>& array2 = array1[1:4]; // [x:y] doesn't exist
也就是说,获取一个数组,该数组是另一个数组的一种视图,而不必复制它。
不,你不能那样做。所有标准库容器都是其数据的唯一所有者,std::array
也不例外。事实上,std::array
被限制以这样一种方式实现,以便元素存储在类的实际数组成员中,这将使别名变得不可能。
有一个关于array_view
类的建议,该类将表示一个连续数据块的非拥有视图。你可以在这里阅读它。我不知道这个提案的状态(当前的C++标准化过程让我感到困惑)。
如果你使用valarray而不是array,你可以http://en.cppreference.com/w/cpp/numeric/valarray/slice
编辑:从 C++20 开始,您可以使用 std::span 引用连续的子数组
是的,你可以,C++20 中的 std::span 提供了对连续对象序列的视图。
std::array<int, 5> array1 = {20, 10, 35, 30, 5};
std::span array2(array1.begin(), array1.begin() + 3); // {20, 10, 35}; subview of array1
基础数据不会被复制,而是被引用,因此在使用 span 时应注意确保原始数组仍然存在。
std::array<int, 3>& array2 = reinterpret_cast<std::array<int, 3>&>(array1);
相关文章:
- 检查输入 std::array 指针数据是否等于某个常量数组
- 基于 std::array 的多维数组
- std::array与C样式数组用于连续内存
- 具有静态 std::array 的神经网络比使用动态 C 数组的神经网络慢
- 不要声明 C 样式数组,而是使用 std::array<>
- 为什么我不能将 C 样式数组复制到 std::array?
- 创建 2D 数组类:如何访问 2D 数组类(如 array[x][y))中的元素
- 尝试使用 Array 类的模板构造整数数组时,错误:为什么数组类型"int [5]"不可分配,
- 为什么span的数组和std::array构造函数与其容器构造函数不同
- 键入 trait 以获取 std::array 或 C 样式数组的元素类型
- 原始数组和 std::array 在 clang++ 和 VC++ 上的不同迭代器行为
- 使用 std::array vs 数组传递对象数组
- 我无法将'2D array whit bool'转换为"空 2D 数组布尔值"(用于生命游戏)
- 为什么 C 数组比 std::array 快得多?
- 为什么在使用堆叠 std::array 声明多维数组时需要"双括号"?
- 使用索引数组订购 ArrayFire Array 的最佳方式
- NAPI AsyncWorker:将指针数组转换为NAPI::array,而不使用大的for
- 从std::array获取对原始数组的引用
- 获取 std::array 底层数组内存大小的最简单方法?
- 数组中的值之和返回内存地址,除非sizeof(array)/2