我正在尝试解决可变大小数组的这个问题,但我遇到了编译错误。不太确定哪里出错了。
Problem can be accessed in this PDF
我的解决方案尝试如下:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int n,q,size,elem,index,smallindex;
//input of n and q
cin>>n>>q;
//declare the array a
int* bigarr = new int[q];
//assign the individual arrays to each element of the array a
for (int i=0; i<n; ++i){
//input of size of the individual array
cin>>size;
int* smallarr = new int[size];
for (int j=0; j<size; ++j){
smallarr[j] = cin>>elem;
}
bigarr[i] = smallarr;
}
//obtain index queries
for (int k=0; k<n; ++k){
cin>>index;
cin>>smallindex;
cout<<bigarr[index][smallindex];
}
}
最佳答案
关于这个声明:
bigarr[i] = smallarr;
smallarr
是一个 int*
指针,但是 bigarr
也是一个 int*
,即 int
的数组, 所以 bigarr[i]
是单int
.您不能分配 int*
指向 int
的指针值(value)。
如果你想要bigarr
要成为指向其他数组的指针数组,您需要声明 bigarr
作为int**
而不是 int*
, 然后使用 new int*[q]
分配它。
int** bigarr = new int*[q];
另外,关于这个声明:
smallarr[j] = cin>>elem;
表达式cin>>elem
返回 istream&
引用cin
, 它不返回 int
值读入 elem
,就像你期待的那样。因此,您不能在对 smallarr[j]
的赋值中直接使用该表达式的结果。 .你必须阅读 elem
并将其分配给 smallarr
在单独的声明中:
cin>>elem;
smallarr[j] = elem;
也就是说,请注意您的代码泄漏了所有分配的数组,因为没有调用 delete[]
任何地方。您需要添加它们:
int** bigarr = new int*[q];
...
for (int i=0; i<n; ++i){
...
int* smallarr = new int[size];
...
bigarr[i] = smallarr;
}
...
for (int i=0; i<n; ++i){
delete[] bigarr[i]; // <-- here
}
delete[] bigarr; // <-- here
不过,您确实应该使用 std::vector
而不是使用 new[]
/delete[]
完全手动(你已经有了 #include <vector>
):
std::vector<std::vector<int> > bigarr(q);
...
for (int i=0; i<n; ++i){
...
std::vector<int> smallarr(size);
for (int j=0; j<size; ++j){
...
smallarr[j] = elem;
}
bigarr[i] = smallarr;
/* alternatively:
bigarr[i].resize(size);
for (int j=0; j<size; ++j){
...
bigarr[i][j] = elem;
}
*/
}
我还看到您正在使用 q
分配bigarr
, 但随后您使用 n
遍历 bigarr
.您不需要两个单独的变量。使用 n
或 q
对于这两个任务,并摆脱其他变量。
除非你真的打算分配更多的插槽然后你想填充。在这种情况下,你的外循环需要确保它不超过n
。和 q
:
for (int i=0; (i<n) && (i<q); ++i){
或者:
for (int i=0; i<std::min(n,q); ++i){
关于使用标准输入和标准输出的 C++ 可变大小数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59402292/