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

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

本文关键字:数组 C++      更新时间:2023-10-16

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

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

s[0]=新整数[3];

s[1]=新整数[4];

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

请帮助我。您的帮助将不胜感激。

上面的语句是否意味着我已经声明了具有 2 的数组 行 & 第一行有 3 列,第二行有 4 列?

在此声明中

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

您声明了一个 int ** 类型的对象,并通过动态分配的两个类型为 int * 的元素数组的第一个元素的地址对其进行初始化

如何遍历数组?意味着我如何显示所有 这个数组的元素?

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

这是一个演示程序

#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 

您可以使用标准类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;
}

输出将如上所示。