[转载]创建二维数组的方法
来源:互联网 发布:vb中变量名的命名规则 编辑:程序博客网 时间:2024/06/10 02:53
对于常规的方法:T [n][n]的方法我就不说了。首先介绍两个动态的创建方法,然后介绍一下C++标准的中使用STL的容器vector创建二维数组的方法。
1.
定义:
const int ROW = 3;
int size = 5;
int (*pi)[ROW] = new int[size][ROW];
操作方法:
int k = 0;
cout <<endl
<<"pi : " <<ROW*size <<endl;
for ( i=0; i<ROW; ++i )
{
for ( int j=0; j<size; ++j )
{
pi[i][j] = k++;//初始化
cout <<setw(2) <<pi[i][j] <<' ';//输出
}
cout <<endl;
}
内存释放:
delete[] pi;
缺点:LOW必须是已知。
优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)。
2.
定义:
int** ppi = new int*[size];
for ( i=0; i<size; ++i )
{
ppi[i] = new int[size];
}
操作方法:
cout <<endl
<<"ppi : " <<size*size <<endl;
k = 0;
for ( i=0; i<size; ++i )
{
for ( int j=0; j<size; ++j )
{
ppi[i][j] = k++;//初始化
cout <<setw(2) <<ppi[i][j] <<' ';//输出
}
cout <<endl;
}
内存释放:
for ( i=0; i<size; ++i )
delete[] ppi[i];
delete[] ppi;
缺点:非连续储存,内存释放烦琐,双重指针。
优点:调用直观,size可以不是已知
由于STL的容器都支持动态增长,可以随时使用vector.resize()来改变容器的容量,所以使用vector创建的数组就具有动态创建的特性。
3.
定义:
vector< vector<int> > ivec( 10 );//指定行的数量
操作方法:
//初始化
vector< vector<int> >::iterator iiter = ivec.begin();
vector< int >::iterator iter;
for ( int i=0; iiter!=ivec.end(); ++iiter )
{
(*iiter).resize ( 10 );
for ( iter=iiter->begin(); iter!=iiter->end(); ++iter )
{
*iter = i++;
}
}
//输出
cout <<"ivec : " <<ivec.size() <<endl;
for ( ; iiter!=ivec.end(); ++iiter )
{
for ( iter=iiter->begin(); iter!=iiter->end(); ++iter )
{
cout <<setw(2) <<*iter <<' ';
}
cout <<endl;
}
缺点:非连续储存,调试不够方便,编译速度下降,程序膨胀(实际速度差别不大)。
优点:调用直观,自动析构与释放内存,可以调用stl相关函数,动态增长。
还可以使用以下的定义指定二维数组的行数和列数:
vector< vector<int> > ivec2( 10, vector<int>(10) );
除此以外,我还在网上看到过以下这样的二级数组的定义,但对于我个人来说,这些所谓的二维数组只是一些所谓的一维数组(我这里强调“所谓”,是想说明,无论是多少维的数组,内存的存储结构都是一维的线性存储,只是以我们人的逻辑,拿[ ]和[ ][ ]加以区分而已),所以只提供了解!
T* ga = new T[m*n];
...
delete []ga;
vector<T> ga;
ga.resize(m*n);
- [转载]创建二维数组的方法
- c++动态创建二维数组的方法
- 创建二维数组的几个方法
- 创建二维数组的方法(随时更新)
- js中二维数组的创建方法
- 二维数组的创建
- 二维数组的创建
- 二维数组的创建
- C++ 动态创建二维数组(转载)
- 创建二维数组的方法(随时更新)
- VC中动态创建二维数组的方法
- c++用动态创建二维数组的几种方法
- C++用new创建二维数组的方法
- c语言动态创建二维数组的方法
- Java中二维数组的创建方法小结
- c++ 创建二维数组的几种方法
- Python中用list创建二维数组的方法
- C++创建动态二维数组的两种方法
- 无效过程调用或参数
- ActionScript3.0 基础知识
- VBScrip运行时错误 收集
- [转载]AT&T 汇编简介
- 同时安装sql2000和sql2005,经验点滴
- [转载]创建二维数组的方法
- C#/StreamReader/Web文件的上传
- 十五个名言
- 上传按钮,-----ASP代码实现
- C#:获得文件版本信息及只读文件的删除
- 制作一颗菜单树
- Lex和Yacc从入门到精通(1)--环境配置篇
- struts+hibernate+spring 通过spring的全权代理方式整合
- COM的调用