基于二级指针实现动态二维数组的不定长输入及遍历
引入:
用C++实现二维不等长数组,大部分教程给的方法是使用STL中的vector,但使用容器只是使用已经包装好的函数而已。
也有些教程利用二级指针(int **pointer)new出二维不定长数组,实现了不定长输入,但是没有给出动态二维不定长数组的遍历方法。因为是基于指针,所以不能用sizeof分别计算某一行的长度。
所以我想到一个解决方法:
每次输入某行的不确定元素数时,利用一个数组把这个数值保存下来,遍历的时候再直接拿来使用。(int[m][n]中的n)
下面给出代码:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int m = 0; 7 int j = 0; 8 int array[10]; 9 cout << "请输入行数" << endl; 10 cin >> m; 11 int **a = new int*[m]; 12 for (int i = 0; i < m; i++) 13 { 14 int n = 0; 15 cout << "请输入该行元素个数---->" << endl; 16 cin >> n; 17 a[i] = new int[n]; 18 cout << "请输入元素---->\t应输入" << n << "个元素"<< endl; 19 for (int k = 0; k < n; k++) 20 { 21 cin >> a[i][k]; 22 } 23 array[j] = n; 24 j++; 25 26 } 27 28 cout << "动态二维数组遍历实现----->" << endl; 29 for (int i = 0; i < m; i++) 30 { 31 for (int k = 0; k < array[i]; k++) 32 { 33 cout << a[i][k] << "\t\t"; 34 } 35 cout << endl; 36 } 37 38 39 system("pause"); 40 return 0; 41 }
核心方案是引入了一个数组去记录每行输入的不定长元素的个数。
遇到实际问题时,可以参考给出的代码封装使用。