如何在 C++ 中使用多维交错数组?

How do I use multidimensional jagged array in C++?

我不熟悉 C++ 中的多维锯齿状数组。我对如何在 C++ 中使用多维锯齿状数组感到困惑。 考虑以下代码:

int** s=new int*[2];

s[0]=new int[3];

s[1]=new int[4];

上面的语句是否意味着我声明的数组有 2 行,第 1 行有 3 列,第 2 行有 4 列? 如何遍历数组?意思是我怎样才能显示这个数组的所有元素? 如何为特定行和列分配特定值。例如,我想将值 9 分配给第 1 行第 2 列。我怎样才能做到这一点? 最后,如何使用删除运算符释放内存?

请帮帮我。非常感谢您的帮助。

Does the above statement means that I've declared array which has 2 rows & 1st row has 3 columns & 2nd row has 4 columns?

在此声明中

int** s = new int*[2];

您声明了一个类型为 int ** 的对象,并通过动态分配的两个类型为 int *

的元素的数组的第一个元素的地址对其进行了初始化

How to iterate through the array? Means that how can I display all elements of this array?

您必须在某处保留动态分配的每个一维数组(行)中的元素数。例如,您可以有一个包含这些数字的附加数组。

这是一个演示程序

#include <iostream>

int main() 
{
    const size_t N = 2;

    int size[N] = { 3, 4 };
    int **a = new int*[N];

    a[0] = new int[ size[0] ] { 1, 2, 3 }; 

    a[1] = new int[ size[1] ] { 4, 5, 6, 7 } ;

    for ( int i = 0; i < N; i++)
    {
        for ( int j = 0; j < size[i]; j++ ) std::cout << a[i][j] << ' ';
        std::cout << std::endl;
    }

    for ( int i = 0; i < N; i++ ) delete [] a[i];
    delete [] a;

    return 0;
}

程序输出为

1 2 3 
4 5 6 7 

您可以使用标准 class std::vector 而不是数组。例如

#include <iostream>
#include <vector>

int main() 
{
    const size_t N = 2;
    std::vector<std::vector<int>> v;
    v.reserve( N );

    v.push_back( { 1, 2, 3 } );
    v.push_back( { 4, 5, 6, 7 } ) ;

    for ( const auto &row : v )
    {
        for ( int x : row ) std::cout << x << ' ';
        std::cout << std::endl;
    }


    return 0;
}

输出将与上面显示的相同。