【问题标题】:I need to create an n-element array a where each index i has a reference to another array of K integers我需要创建一个 n 元素数组 a ,其中每个索引 i 都引用另一个 K 整数数组
【发布时间】:2017-12-12 15:36:33
【问题描述】:

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

这是我必须实现的。它是hackerrank variable sizedarray 问题。 https://s3.amazonaws.com/hr-challenge-images/14507/1476906485-2c93045320-variable-length-arrays.png

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

以下是获取 sn-p 的完整代码。

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;

  }
}

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

【问题讨论】:

  • std::vector&lt;std::vector&lt;int&gt;&gt; seq(n); seq.push_back(std::vector&lt;int&gt;(a));

标签: c++ arrays pointers dynamic-arrays variable-length-array


【解决方案1】:

如果你写的是int *p,这意味着你定义了一个指针来存储一个整数的地址。

同样,int **p 表示指向整数指针的指针。

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

int *a = new int[10];

这里的指针“a”指向刚刚创建的数组“new”的第一个元素的地址,一个整数。

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

现在,来回答你的问题。

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

这里的“新”将创建一个“指针”数组。所以要指向第一个元素,也就是这里的指针,你需要使用指向指针的指针。这就是为什么 **seq。

【讨论】:

  • 非常感谢!但是我有一个疑问,如果我要写 int *seq=new int*[n];这意味着什么?这意味着什么吗?还是只是语法错误?
  • 会报错。如前所述, new int*[n] 将返回指向指针的指针。所以如果你写 int *seq,这里 seq 可以存储一个整数的地址,而不是一个指向整数的指针。所以这肯定会显示错误。
猜你喜欢
  • 2017-07-07
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 2022-07-29
相关资源
最近更新 更多