是否可以在 C++ 中获得 std::array 的子数组?

Ant*_*t6n 7 c++ stl c++11

我想做类似的事情

std::array<int, 5> array1 = {{ ... }};
const std::array<int, 3>& array2 = array1[1:4]; // [x:y] doesn't exist
Run Code Online (Sandbox Code Playgroud)

也就是说,获取一个数组,它是另一个数组的一种视图,而不必复制它。

Bri*_*ian 6

不,你不能那样做。所有标准库容器都是其数据的唯一所有者,std::array也不例外。事实上,std::array被限制为以这样一种方式实现,以便元素存储在类的实际数组成员中,这将使别名成为不可能。

有一个array_view类的提议,该类将代表一个连续数据块的非拥有视图。你可以在这里阅读它。我不知道这个提案的状态(当前的 C++ 标准化过程让我感到困惑)。


小智 -5

std::array<int, 3>& array2 = reinterpret_cast<std::array<int, 3>&>(array1);
Run Code Online (Sandbox Code Playgroud)

  • 最暴力地违反它。我能想到几个我不会在公共论坛上使用的不雅类比。 (2认同)
  • 这将依赖于 `std::array` 包装 C 样式数组(在这种情况下,我不相信存在别名冲突),但标准并不要求这样做 (2认同)