如何在 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;
}
输出将与上面显示的相同。
我不熟悉 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;
}
输出将与上面显示的相同。