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

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

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


一、当使用vector的时候

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

// 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<int *> array;
	array.push_back( Array(2) );
	array.push_back( Array(3) );

	for (vector<int *>::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:列先确定,行后确定

#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:行先确定,列后确定,这是一种很常见的情况

#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:行列均不固定的情况

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

#define ROW		2
#define COL		3

int _tmain(int argc, _TCHAR* argv[])
{
	int value = 0;
	int **array;

	// 为array的分配ROW行个int*数据
	array = new int*[ROW]();

	for (int i = 0; i < ROW; i++)
	{
		// 为array[i]的每一列分配COL个int的空间
		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;
}

最后的总结:其实大多数情况下,二维数组都可以转换成一维数组来使用


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值