有谁知道如何解决变长数组的问题?

时间:2017-03-21 05:45:45

标签: c++ arrays c++11

输入格式

第一行包含两个以空格分隔的整数,表示相应的值(可变长度数组的数量)和(查询的数量)。 后续行的每一行包含格式为k a [i] 0 a [i] 1 ... a [i] k-1的空格分隔序列,其描述位于的元素阵列。 每个后续行包含两个以空格分隔的整数,用于描述查询的相应值(数组中的索引)和(引用的数组中的索引)。

输出格式 - 对于每对和值(即,对于每个查询),打印单个整数,表示位于所引用的数组的索引处的元素。总共应该有输出线。

示例输入

2 2 3 1 5 4 5 1 2 8 9 3 0 1 1 3 样本输出

5 9

有人通过 -

解决了这个问题
int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */   
   int n,q; //n number of variable lenght arrays
   // q no of queries asked
    cin >>n >>q;
   int ** Vectors = new int *[n];//no of length of var. arrays
   int j;
    for (int i=0;i<n;i++)
    {   
        cin>>j;
        Vectors[i] = new int [j];
        for (int y=0;y<j;y++)
            cin>>Vectors[i][y];
    }
    int q1,q2;
    for (int i=0;i<q;i++)
    {
        cin >>q1 >> q2;
        cout<<Vectors[q1][q2]<<endl;

     }

    return 0; 
}

有人能解释一下这段代码吗?或者,如果有人有更好的方法来解决这个问题。然后请详细解释。

2 个答案:

答案 0 :(得分:0)

这应该很难理解,代码基本上是在运行时初始化动态2D数组,然后将值插入到2D数组中,然后通过给出索引来访问它:

int ** Vectors = new int *[n];//no of length of var. arrays
       int j;
        for (int i=0;i<n;i++)
        {   
            cin>>j;
            Vectors[i] = new int [j]; // initialzing inner array.. consider it as 2D array with n rows and j columns
            for (int y=0;y<j;y++)
                cin>>Vectors[i][y]; // insert element at specified index
        }

cout<<Vectors[q1][q2]<<endl; // access element from 2D array

答案 1 :(得分:0)

您可能想要使用的是Matrix类。 使用

vector<vector<int>> 

应该这样做。

或者,应将snipet代码重构为带有构造函数和析构函数的Matrix类。 您提供的示例会显示内存泄漏,因为未释放已分配的内存。