我不熟悉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运算符解除内存?
请帮帮我。我们将非常感谢您的帮助。
答案 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;
}
输出与上面显示的相同。