【问题标题】:How do I use multidimensional jagged array in C++? [closed]如何在 C++ 中使用多维交错数组? [关闭]
【发布时间】:2015-03-08 08:45:59
【问题描述】:

我不熟悉 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 列。我怎样才能做到这一点? 最后如何使用删除操作符释放内存?

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

【问题讨论】:

  • 只需使用std::vector<std::vector<int>>。对于大多数用例,您不会在 C++ 中使用 new

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


【解决方案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;
}

输出将与上图相同。

【讨论】:

  • 那么,int **s= new *int[2]; 之间有什么区别吗?和 int **s=new int*[2];两者一样吗?如果不是,有什么区别?请帮帮我。
  • @满足这条记录 int **s= new *int[2];完全无效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 2014-11-08
  • 2013-05-22
  • 1970-01-01
  • 2016-04-01
相关资源
最近更新 更多