动态二维数组的使用,在这里讨论 (一)

2014-11-24 02:34:45 · 作者: · 浏览: 5

一直都没好好的使用过动态二维数组,从前我一直觉得二维数组能做的,一维数组都可以。。


下面给出几种情况,都和动态的二维数组相关的:

一、当使用vector的时候

不确定行列数的时候可以这么干:

[cpp]
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
using namespace std;
#include "vector"

#define COL 4

int *Array(int radix)
{
int *array = new int[4];
for (int i = 0; i < COL; i++)
{
array[i] = (i+1) * radix;
}

return array;
}

int _tmain(int argc, _TCHAR* argv[])
{
vector array;
array.push_back( Array(2) );
array.push_back( Array(3) );

for (vector::iterator it = array.begin(); it != array.end(); *it++)
{
int *test = *it;
for (int i = 0; i < COL; i++)
{
cout << test[i] << " ";
}
cout << endl;
}

return 0;
}

// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
using namespace std;
#include "vector"

#define COL 4

int *Array(int radix)
{
int *array = new int[4];
for (int i = 0; i < COL; i++)
{
array[i] = (i+1) * radix;
}

return array;
}

int _tmain(int argc, _TCHAR* argv[])
{
vector array;
array.push_back( Array(2) );
array.push_back( Array(3) );

for (vector::iterator it = array.begin(); it != array.end(); *it++)
{
int *test = *it;
for (int i = 0; i < COL; i++)
{
cout << test[i] << " ";
}
cout << endl;
}

return 0;
}

二、在不使用vector的时候

分三种情况

1:列先确定,行后确定
[cpp]
#include "stdafx.h"
#include "iostream"
using namespace std;
#include "vector"

#define ROW 2
#define COL 3

int _tmain(int argc, _TCHAR* argv[])
{
int (*array)[COL];

array = new int[ROW][COL];

int value = 0;
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
array[i][j] = ++value;
}
}

for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
cout << array[i][j] << " ";
}
cout << endl;
}

delete[] array;

return 0;
}

#include "stdafx.h"
#include "iostream"
using namespace std;
#include "vector"

#define ROW 2
#define COL 3

int _tmain(int argc, _TCHAR* argv[])
{
int (*array)[COL];

array = new int[ROW][COL];

int value = 0;
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
array[i][j] = ++value;
}
}

for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
cout << array[i][j] << " ";
}
cout << endl;
}

delete[] array;

return 0;
}

2:行先确定,列后确定,这是一种很常见的情况
[cpp]
#include "stdafx.h"
#include "iostream"
using namespace std;
#include "vector"

#define ROW 2
#define COL 3

int _tmain(int argc, _TCHAR* argv[])
{
int *array[ROW];

int value = 0;
for (int i = 0; i < ROW; i++)
{
array[i] = new int[COL];
}

for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
array[i][j] = ++value;
}
}

for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
cout << array[i][j] << " ";
}
cout << endl;
}

for (int i = 0; i < ROW; i++)
{
if (array[i])
{
delete[] array[i];
array[i] = NULL;
}

}

return 0;
}

#include "stdafx.h"
#include "iostream"
using namespace std;
#include "vector"

#define ROW 2
#define COL 3

int _tmain(int argc, _TCHAR* argv[])
{
int *array[ROW];

int value = 0;
for (int i = 0; i < ROW; i++)
{
array[i] = new int[COL];
}

for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
array[i][j] = ++value;
}
}

for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
cout << array[i][j] << " ";
}
cout << endl;
}

for (int i = 0; i < ROW; i++)
{
if (array[i])
{
delete[] array[i];
array[i] = NULL;
}

}

return 0;
}

3:行列均不固定的情况
[cpp]
#include "stdafx.h"
#include "iostream"
using namespace std;
#include "vector"

#define ROW 2