如何声明指向C++ 11 std :: array的指针?

whi*_*ell 4 c++ pointers c++11 stdarray

根据变量,我需要选择SeedPositions32或SeedPositions16数组以供进一步使用.我认为一个指针可以允许这个,但我无法播种使它工作.如何声明指向C++ 11 std :: array的指针?我试过以下.

array<int>* ArrayPointer;
//array<typedef T, size_t Size>* ArrayPointer;
array<int,32> SeedPositions32 = {0,127,95,32,64,96,31,63,16,112,79,48,15,111,80,
                               47,41,72,8,119,23,104,55,87,71,39,24,7,56,88,103,120};
array<int,16> SeedPositions16 = {...}
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 15

std::array有一个大小的模板参数.std::array具有不同大小的两个模板实例是不同类型.所以你不能有一个可以指向不同大小的数组的指针(禁止void*欺骗,这会打开它自己的蠕虫.)

您可以使用模板作为客户端代码,也可以使用std::vector<int>.

例如:

template <std::size_t N>
void do_stuff_with_array(std::array<int, N> the_array)
{
  // do stuff with the_array.
}

do_stuff_with_array(SeedPositions32);
do_stuff_with_array(SeedPositions16);
Run Code Online (Sandbox Code Playgroud)

请注意,您还可以获取指向数据的指针:

int* ArrayPtr =  SeedPositions32.data();
Run Code Online (Sandbox Code Playgroud)

但在这里,你丢失了尺寸信息.您必须独立跟踪它.

  • @ Mhd.Tahawi您可以获取指向基础数据的指针,但是您丢失了类型信息(特别是大小). (2认同)
  • 注意:一个经常使用的类是`ArrayRef`或`array_view`,它包含指向数组和数组大小的指针,以及重载所有有用的运算符(呈现容器接口).很遗憾,它还不是标准版,但很容易编写代码.它的主要问题是协调其生命周期与底层存储的生命周期...... (2认同)