可以在不复制的情况下获得std ::数组的子阵列?

问题描述 投票:0回答:3
to,获得一个数组,它是另一个数组的视图,而无需复制它。

,你不能那样做。所有标准库容器都是其数据的独特所有者,
std::array

也不例外。实际上,

std::array
c++ c++11 stl
3个回答
6
投票
有一个

array_view

类的建议,它将代表不持有的视图中的一个连续数据块。您可以阅读有关它的信息。我不知道该提案的状态(当前的C ++标准化过程使我感到困惑)。
    
如果您使用valarray而不是数组

http://en.cppreference.com/w/cpp/numeric/valarray/slice

Edit:从C ++ 20,您可以参考具有std::Span

的连续子阵列

5
投票
您可以,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

基础数据未被复制而是引用,因此应注意确保使用跨度时原始数组仍然存在。

std::array<int, 3>& array2 = reinterpret_cast<std::array<int, 3>&>(array1);

2
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.