C++中动态申请二维数组

这里主要介绍C++中动态申请二维数组的两种方式,直接给出代码,很容易明白,简单的作为一个笔记。

#include <iostream>
#include <iomanip>         // 输入输出操纵
#include <vector>
using namespace std;

// 法一:new 方式申请
void dynamicArray()
{
	int rows, cols;
	cin >> rows >> cols;
	int **element = new int* [rows];    // 申请二维动态数组
	int i;
	for (i = 0; i < rows; i++)
		element[i] = new int[cols];

	int j;
	for(i = 0; i < rows; i++)               // 初始化
	{
		for (j = 0; j < cols; j++)
		{
			cin >> element[i][j];
		}
	}
	for (i = 0; i < rows; i++)
	{
		for(j = 0; j < cols; j++)
		{
			cout << setw(4) << element[i][j];   // 每个输出占四个字符,前面以空格填充
			//cout << setfill('*') << element[i][j];  // 空格以*填充
		}
		cout << endl;
	}

	for(i = 0; i < cols; i++) // 释放动态数组
	{
		delete []element[i];
	}
	delete []element;

}

// 法二:vector 方式  没用new无需释放
void dynamicArray2()
{
	int rows, cols;
	cin >> rows >> cols;
	vector<vector<int>> element(rows, vector<int>(cols));  // 用vector申请二维动态数组
	int i,j;
	for(i = 0; i < rows; i++)               // 初始化
	{
		for (j = 0; j < cols; j++)
		{
			cin >> element[i][j];
		}
	}
	for (i = 0; i < rows; i++)
	{
		for(j = 0; j < cols; j++)
		{
			cout << setw(4) << element[i][j];   // 每个输出占四个字符,前面以空格填充
			//cout << setfill('*') << element[i][j];  // 空格以*填充
		}
		cout << endl;
	}

}

参考blog:1:http://www.cnblogs.com/China3S/p/3616938.html

2:http://blog.sina.com.cn/s/blog_afe2af380101b4gz.html

时间: 2024-10-11 12:03:47

C++中动态申请二维数组的相关文章

C++中动态申请二维数组并释放方法

C/C++中动态开辟一维.二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下. C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/delete (3)STL容器中的vector 下面逐一介绍: 第一种:malloc/free 1.动态开辟一维数组 [cpp] view plaincopy //动态开辟一维数组 void dynamicCreate1Array() { int m; int i; int *p; printf("

C++动态申请二维数组与拷贝构造函数

一.C++动态申请二维数组 在C++中不能直接动态申请二维数组,经过一番搜索,发现一种动态申请二维数组较好的方法. 代码如下(MATRIX_TYPE为某一种类型,Lines和Columns): MATRIX_TYPE** elem; //C++二维矩阵动态申请空间 elem = new MATRIX_TYPE*[Lines]; elem[0] = new MATRIX_TYPE[Lines * Columns]; for(int i = 1; i < Lines; i++) elem[i] =

动态申请 二维数组 以及初始化、 赋值

二维堆数组 可以利用指针的指针 例如 int ** array = new int[i][j]; 但是这样不能通过编译,因为堆数组不像基于栈数组那样工作,为其分配的内存是不连续的,因此堆数组分配足够的内存是不对的,应当先分配基于堆数组第一维数组下标分配一个连续的数组.该数组的每一个元素实际上是指向一个数组的指针. 一个测试小例: #include <iostream> #include <stdio.h> #include <cstring> using namespa

动态申请二维数组

int main() {int **p;int m,n; cout << "请输入行数和列数:" << endl;cin >> m >> n; p = new int *[m]; for(int i = 0;i <= m-1;i++){    p[i]=new int[n];} for(int row = 0;row <= m-1;row++){    for(int col = 0; col <= n-1;col++)

如何在C++中动态建立二维数组(转)

http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/[email protected]/blog/static/7198839920117252550574/ C++中用new动态创建二维数组的格式一般是这样: TYPE (*p)[N] = new TYPE [][N]; 其中,TYPE是某种类型,N是二维数组的列数.采用这种格式,列数必须指出,而行数无需指定.在这里,p的类型是TYPE*[N],即是指

c++和c动态申请二维数组

这是我面试中遇到的一道题,用c和c++分别申请一个二维数组,int **res,要求申请后的可以使用res[3][4]这一类防存方式. 这个是没有错误检查的版本. 答案: c++语言的版本 int **allocate(int row, int column) { int **res = new int*[row]; for (int i = 0; i < row; i++) { res[i] = new int[column]; } return res; } c语言 int **alloca

转:用STL中的vector动态开辟二维数组

用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int main(){ int m, //行数     n; //列数 cout << "input value for m,n:"; cin>>m>>n;  //注意下面这一行:vector<int后两个">"之间要有空格!否则会被认

一句话动态开辟二维数组

#include<iostream> using namespace std; //动态开辟int p[4][5]数组 void main() { //为了验证正确性,我们先把开辟的一维数组赋值给 pp int *pp=new int[20]; int i=0,j=0; for(i=0;i<20;i++)//为一维数组中每一个元素赋值,并输出该元素地址 { pp[i]=i; cout<<&(pp[i])<<" ";//即 pp+i }

C语言 动态创建二维数组

/*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include <stdlib.h> #include <stdio.h> #include <malloc.h> #define RANK 10 #define COLUMN 7 int main() { int i,j; int (*p)[COLUMN]; //动态生成二维数组,指定列数为COLUMN,如果想改,自己该里面 //的参数,如果想定义n行2列就为: p=(int (*