我需要创建一个 n 元素数组 a,其中每个索引 i 都引用另一个 K 整数数组

I need to create an n-element array a where each index i has a reference to another array of K integers

K的值因数组而异。如何做到这一点?

这就是我必须要达到的目标。它是 hackerrank 可变 sizedarray 问题。 https://s3.amazonaws.com/hr-challenge-images/14507/1476906485-2c93045320-variable-length-arrays.png

我已阅读解决方案,但无法理解。 请解释这行代码:int** seq=new int* [n];

以下是截取该片段的完整代码。

int main()
{
    int n,q;
    cin>>n>>q;
    int** seq=new int* [n];
    for(int i=0;i<n;i++)
    {  
      int a;
      cin>>a;
      int* b=new int [a];
      for(int j=0;j<a;j++)
        {
          int e;
          cin>>e;
          b[j]=e;
        }
       *(seq+i)=b;
   }

  for(int i=0;i<q;i++)
  {

      int r,s;
      cin>>r>>s;
      cout<<seq[r][s]<<endl;

  }
}

我还阅读了一些有关使用向量创建可变大小数组的内容。我不明白。请解释。

如果你写 int *p,这意味着你正在定义一个指针,它将存储一个整数的地址。

同理,int **p表示指向整型指针的指针。

现在,假设您创建一个这样的一维数组:

int *a = new int[10];

这里的指针"a"指向刚刚创建的数组"new"的第一个整数的地址。

要访问单个元素,您可以使用 a[i] 或简单地使用 *(a+i)。

现在开始回答你的问题。

int **seq = new int*[n];

此处的 "new" 将创建一个 "pointers" 的数组。所以要指向第一个元素,也就是这里的指针,就需要使用指向指针的指针。这就是为什么 **seq.