如何在C ++中使用多维锯齿状数组?

时间:2015-03-08 08:46:00

标签: c++ arrays multidimensional-array jagged-arrays

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

  

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

     

s [0] = new int [3];

     

s [1] = new int [4];

上述陈述是否意味着我宣布了有2行&的数组。第一行有3列&第2行有4列? 如何遍历数组?意味着如何显示此数组的所有元素? 如何为特定行分配特定值&柱。例如,我想将值9分配给第1行第2列。我怎样才能做到这一点? 最后,如何使用delete运算符解除内存?

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

1 个答案:

答案 0 :(得分:1)

  

上述语句是否意味着我声明了具有2的数组   行和第一行有3列&第2行有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;
}

输出与上面显示的相同。