C++ 动态开辟二维数组的的方法
2015-09-28 12:37
323 查看
动态开辟二维数组,方法1:用new在堆上开辟;方法2:用vector开辟。
一:C++ new 法
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int row, col;
int **element = NULL;
cin>>row
>>col;
//动态开辟数组
element = new int *[row];
for (int i = 0; i < row; i++)
{
element[i] = new int[col];
}
//输入数组
cout<<endl;
for (i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cin>>element[i][j];
}
}
//输出数组
cout<<endl;
for (i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout<<setw(5)<<element[i][j];
}
cout<<endl;
}
}
关键之处用红笔标绘出来了!大家肯定一看就懂了!
但是,有时对于新手来说,确实很懵懂的。开辟一维数组是何等简单,但是二维数组还是用开辟一维数组的思想!
程序不足之处是没有销毁开辟的空间!那大家在看。看销毁的代码吧!
//销毁空间
for (i = 0; i < row; i++)
{
delete []element[i];
element[i] = NULL;
}
delete []element;
element = NULL;
这是销毁开辟的空间的代码!
用new在堆上开辟的空间,必须要用delete释放了,不然要出现内存泄露了!
二:vector法
学习C++,就不得不学习STL了。用vector开辟二维数组也不失为一个好办法!
首先看一段代码!
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
void main()
{
int row, col;
cout<<"请输入行列值:";
cin>>row
>>col;
vector<vector<int> > test(row, vector<int>(col)); //声明一个二维数组,注意这里的空格不能少
//初始化,其实不初始化也是可以的,vector默认是0
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
test[i][j] = 0;
}
}
cout<<endl;
//输出值
for (i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout<<setw(5)<<test[i][j];
}
cout<<endl;
}
//输出行列值
cout<<"行:"<<test.size()<<endl;
cout<<"列:"<<test[1].size()<<endl;
}
编译时两次调用vector的构造函数对象test,第一次调用构造一个无名的含有col个0的vector<int>对象.
第二次调用构造函数,以这个无名向量为初始值初始化它的row个元素!
转自:http://blog.csdn.net/vipygd/article/details/5909817
一:C++ new 法
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int row, col;
int **element = NULL;
cin>>row
>>col;
//动态开辟数组
element = new int *[row];
for (int i = 0; i < row; i++)
{
element[i] = new int[col];
}
//输入数组
cout<<endl;
for (i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cin>>element[i][j];
}
}
//输出数组
cout<<endl;
for (i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout<<setw(5)<<element[i][j];
}
cout<<endl;
}
}
关键之处用红笔标绘出来了!大家肯定一看就懂了!
但是,有时对于新手来说,确实很懵懂的。开辟一维数组是何等简单,但是二维数组还是用开辟一维数组的思想!
程序不足之处是没有销毁开辟的空间!那大家在看。看销毁的代码吧!
//销毁空间
for (i = 0; i < row; i++)
{
delete []element[i];
element[i] = NULL;
}
delete []element;
element = NULL;
这是销毁开辟的空间的代码!
用new在堆上开辟的空间,必须要用delete释放了,不然要出现内存泄露了!
二:vector法
学习C++,就不得不学习STL了。用vector开辟二维数组也不失为一个好办法!
首先看一段代码!
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
void main()
{
int row, col;
cout<<"请输入行列值:";
cin>>row
>>col;
vector<vector<int> > test(row, vector<int>(col)); //声明一个二维数组,注意这里的空格不能少
//初始化,其实不初始化也是可以的,vector默认是0
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
test[i][j] = 0;
}
}
cout<<endl;
//输出值
for (i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout<<setw(5)<<test[i][j];
}
cout<<endl;
}
//输出行列值
cout<<"行:"<<test.size()<<endl;
cout<<"列:"<<test[1].size()<<endl;
}
编译时两次调用vector的构造函数对象test,第一次调用构造一个无名的含有col个0的vector<int>对象.
第二次调用构造函数,以这个无名向量为初始值初始化它的row个元素!
转自:http://blog.csdn.net/vipygd/article/details/5909817
相关文章推荐
- 【操作系统】c++程序的内存分配
- 移动构造-C++11
- C/C++ 中头文件相互包含引发的问题
- C++如何避免使用rand() % xxx的方式实现类似抽奖概率类的问题
- C++ boost::filesystem官方指南
- 【c++程序】浅说虚函数
- 转载 浅谈C/C++中的static和extern关键字
- C++ std::vector : 用法与技巧
- 利用makefile文件来编译C++
- C++ sort vector<vector<int> > or vector<MyClass> 容器的排序
- C++学习笔记25,析构函数总是会宣布virtual
- C++中局部静态变量的调用问题
- C语言:排序算法
- C++ int main(int argc,char* argv[])详解
- c++笔试题-输入n,输出对应的所有长度为n的二进制串
- C/C++语言杂谈
- C++ 墙角知识 04
- c++ typedef类型定义
- c++ 初始化
- 黑马程序员——C语言日志——typedef的使用以及和#define的区别