数组(一维二维三维)的动态申请及用vector的表示方法_第1页
数组(一维二维三维)的动态申请及用vector的表示方法_第2页
数组(一维二维三维)的动态申请及用vector的表示方法_第3页
数组(一维二维三维)的动态申请及用vector的表示方法_第4页
数组(一维二维三维)的动态申请及用vector的表示方法_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、  数组(一维、二维、三维)的动态申请及用vector的表示方法 收藏 1 变长一维数组这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做:#include<iostream>using namespace std;int main() int len; cin>>len; /用指针p指向new动态分配的长度为len*sizeof(int)的内存空间 int *p=new intlen; .

2、0;delete p; return 0;注意int *p=new intlen;这一句,你不能这样做: int plen; C+编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行: int p=new intlen;编译器会说不能把int*型转化为int型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int *p=new intlen;以上程序实现了一个变长的一维数组,但是要养成一个好习惯,就是注意要注销指针p,使程序释放用new开辟的内存空间。

3、60;   当然使用C+标准模版库(STL)中的vector(向量)也可以实现变长数组:#include<iostream>#include<vector>using namespace std;int main() int len; cin>>len; vector<int> array(len);/声明变长数组 for(int i=0;i<len;i+)  arrayi=i; cout<<arrayi<<"

4、;t"  return 0;  2 变长二维数组用C+实现变长二维数组时可以采用两种方法:双指针方法和使用STL中vector(向量)的方法。首先介绍一下双指针方法,在这里双指针就是指像指针的指针,比如你可以这样声明一个数组:int *p = new int*num1;而对每一个*p(一共num1个*p)申请一组内存空间:for(int i=0; i<num1; +i)  pi = new intnum2;其中,num1是行数,num2是数组的列数。测试的源程序如下: #include <io

5、stream>#include <iomanip>using namespace std;int main() int num1;/行数 int num2;/列数 cout<<"Please enter the number for row and column: "<<endl; cin >> num1 >> num2; /为二维数组开辟空间 int *p;p= new int*num1; for(int i=0; i<num1;

6、+i) pi = new intnum2; for(int j=0;j<num1;j+)  for(int k=0;k<num2;k+)    pjk=(j+1)*(k+1);   cout<<setw(6)<<pjk<<':'<<setw(8)<<&pjk;  cout<<endl;  /释放二维数组占用的空间 for(int m=0;m<n

7、um1;m+) delete pm; delete p;  return 0; 用vector(向量)实现二维数组,以下给出源程序:#include <iostream>#include <vector>#include <iomanip>using namespace std;int main() int i,    j,    m, /行数    n; /列数 cout << &quo

8、t;input value for m,n:" cin>>m>>n;  /注意下面这一行:vector<int后两个">"之间要有空格!否则会被认为是重载">>"。 vector<vector<int> >  vecInt(m, vector<int>(n);  for (i = 0; i < m; i+) for (j = 0; j < n; j+) 

9、0; vecIntij = i*j;   for (i = 0; i < m; i+)  for (j = 0; j < n; j+)   cout<<setw(5)<<vecIntij<<":"<<setw(9)<<&vecIntij; cout<<endl;  return 0;3 变长三维数组根据以上一、二维数组,可以推出三维数组的实现。以下是指针实现代码:#inclu

10、de <iostream>using namespace std;void main()    int *p3;    int x=3,y=2,z=2;    p3=new int *x;    for (i=0;i<x;i+)            p3i=new int* y;     

11、   for (int j=0;j<y;j+)                    p3ij=new intz;            for (int k=0;k<z;k+)         &

12、#160;                  p3ijk=i*j*k;                            for (int k=0;k<z;k+)

13、0;           for (int i=0;i<x;i+)                    for (int j=0;j<y;j+)              &#

14、160; cout<<p3ijk<<" " ;            cout<<endl;                cout<<endl;         for (int i=0;i<x;i+)&

15、#160;           for (int j=0;j<y;j+)                    delete p3ij;                delete p

16、3i;        delete p3;以下是vector实现代码:#include <iostream>#include <vector>using namespace std;void main()    int m=2;    int n=3;    int l=4;    vector<vector<vector<int> > >

17、; v(m,vector<vector<int> >(n,vector<int>(l);    v123=4;    cout<<v123<<endl;4 用一维动态数组表示二维、三维动态数组以下是程序代码:#include <iostream>using namespace std;void main()    int m=3,n=4,l=2;    int *p2;

18、60;  /将表示二维数组    p2=new intm*n;    int i,j,k;    for (i=0;i<m;i+)        for(j=0;j<n;j+)                    p2i*n+j=i+j

19、;             cout<<"二维数组"<<endl;    for (i=0;i<m;i+)            for(j=0;j<n;j+)             

20、;       cout<<p2i*n + j<<" "                cout<<endl;        delete p2;     int *p3;   /将表示三维数组  

21、60; p3=new intm*n*l;    for (k=0;k<l;k+)        for (i=0;i<m;i+)            for (j=0;j<n;j+)                            p3k*n*m + i*n + j=i+j+k;         &#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论