C++动态数组(转)
生活随笔
收集整理的這篇文章主要介紹了
C++动态数组(转)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C++動(dòng)態(tài)數(shù)組(轉(zhuǎn))
2009-03-17 09:18:37
標(biāo)簽:數(shù)組 C++
1.變長(zhǎng)一維數(shù)組??
???
? 這里說(shuō)的變長(zhǎng)數(shù)組是指在編譯時(shí)不能確定數(shù)組長(zhǎng)度,程序在運(yùn)行時(shí)需要?jiǎng)討B(tài)分配內(nèi)存空間的數(shù)組。實(shí)現(xiàn)變長(zhǎng)數(shù)組最簡(jiǎn)單的是變長(zhǎng)一維數(shù)組,你可以這樣做:??
???
? //文件名:?? array01.cpp??
? #include<iostream>??
? using?? namespace?? std;??
???
? int?? main()??
? {??
??? int?? len;??
??? cin>>len;??
??? //用指針p指向new動(dòng)態(tài)分配的長(zhǎng)度為len*sizeof(int)的內(nèi)存空間??
??? int?? *p=new?? int[len];??
??? ...........??
??? delete[]?? p;??
??? return?? 0;??
? }??
???
? 注意int?? *p=new?? int[len];這一句,你不能這樣做:??
? int?? p[len];??
? C++編譯器會(huì)報(bào)錯(cuò)說(shuō)len的大小不能確定,因?yàn)橛眠@種形式聲明數(shù)組,數(shù)組的大小需要在編譯時(shí)確定。而且這樣也不行:??
? int?? p[]=new?? int[len];??
? 編譯器會(huì)說(shuō)不能把int*型轉(zhuǎn)化為int[]型,因?yàn)橛胣ew開(kāi)辟了一段內(nèi)存空間后會(huì)返回這段內(nèi)存的首地址,所以要把這個(gè)地址賦給一個(gè)指針,所以要用int?? *p=new?? int[len];??
???
? array01.cpp實(shí)現(xiàn)了一個(gè)變長(zhǎng)的一維數(shù)組,但是要養(yǎng)成一個(gè)好習(xí)慣,就是注意要注銷(xiāo)指針p,使程序釋放用new開(kāi)辟的內(nèi)存空間。??
? 當(dāng)然使用C++標(biāo)準(zhǔn)模版庫(kù)(STL)中的vector(向量)也可以實(shí)現(xiàn)變長(zhǎng)數(shù)組:??
???
? //文件名:?? array02.cpp??
? #include<iostream>??
? #include<vector>??
? using?? namespace?? std;??
???
? int?? main()??
? {??
??? int?? len;??
??? cin>>len;??
??? vector<int>?? array(len);//聲明變長(zhǎng)數(shù)組??
???
??? for(int?? i=0;i<len;i++)??
??? {??
????? array[i]=i;??
????? cout<<array[i]<<"\t";??
??? }??
??? return?? 0;??
? }??
???
? 這里的變長(zhǎng)數(shù)組讓我聯(lián)想到了java的java.util包中的vector和C#中的ArrayList,它們也可以在各自的語(yǔ)言中實(shí)現(xiàn)變長(zhǎng)數(shù)組。不過(guò)C++中的vector不能像C#一樣有托管的垃圾回收機(jī)制回收被占用的內(nèi)存空間,但是你可以在使用完vector后調(diào)用~vector()析構(gòu)函數(shù)釋放內(nèi)存。??
???
? 2.變長(zhǎng)n維數(shù)組??
? 變長(zhǎng)的n維數(shù)組實(shí)現(xiàn)起來(lái)有些麻煩,但是在工程與軟件設(shè)計(jì)應(yīng)用中常使用的是二維數(shù)組,所以在這里著重介紹變長(zhǎng)的二維數(shù)組,變長(zhǎng)的n維數(shù)組可以按照類(lèi)似的方法實(shí)現(xiàn)。首先看一個(gè)經(jīng)典的用C實(shí)現(xiàn)變長(zhǎng)二維數(shù)組的例子:??
???
? //文件名:?? array03.c??
? #include???? <stdio.h>??????
? #include???? <malloc.h>??????
?????
? void???? main()??????
?????????????????????????????
? {??????
??????????????????????? int???? x,y,i,j;??????
??????????????????????? float???? **a,*b;??????
??????????????????????????????????????????????? printf("請(qǐng)輸入你所求解的線性方程組的行數(shù)x:x=");??????
??????????????????????? scanf("%d",&x);??????
??????????????????????????????????????????????? printf("請(qǐng)輸入你所求解的線性方程組的列數(shù)y:y=");??????
??????????????????????? scanf("%d",&y);??????
?????
??????????????? a=(float???? **)malloc(sizeof(float???? *)???? *x);??????
??????????????? b=(float???? *)malloc(sizeof(float)???? *x);??????
??????????????????????? for(i=0;i<x;i++)??????
??????????????????????? {??????
??????????????????????????????????????????????? *(a+i)=(float???? *)malloc(sizeof(float)???? *y);??????
??????????????????????? }??????
?????
? /*讀入數(shù)據(jù)*/??????
?????
??????????????????????? printf("請(qǐng)按行的順序依次輸入系數(shù)的值(共%d項(xiàng)):",x*y);??????
??????????????????????? for(i=0;i<=x-1;i++)??????
??????????????????????????????????????????????? for(j=0;j<=y-1;j++)??????
??????????????????????????????????????????????????????????????????????? scanf("%f",&a[i][j]);??????
??????????????????????? printf("請(qǐng)按列的順序依次輸入常數(shù)的值(共%d項(xiàng)):",x);??????
??????????????????????? for(j=0;j<=x-1;j++)??????
??????????????????????????????????????????????????????????????????????? scanf("%f",&b[j]);??????
?????
??????????????????????? printf("您輸入方程組的增廣矩陣為:\n");??????
??????????????????????? for(i=0;i<=x-1;i++)??????
??????????????????????? {??????
??????????????????????????????????????????????? for(j=0;j<=y-1;j++)??????
??????????????????????????????????????????????????????????????????????? printf("%.5f???????? ",a[i][j]);??????
??????????????????????????????????????????????? printf("%.5f???????? ",b[i]);??????
??????????????????????????????????????????????? printf("\n");??????
??????????????????????? }??????
??????????????????????? free(b);??????
??????????????????????? for(i=0;i<x;i++)??????
??????????????????????????????????????????????? free???? (*(a+i));????
? }??
???
? 那么用C++怎樣實(shí)現(xiàn)呢?在C++中可以通過(guò)new和delete運(yùn)算符動(dòng)態(tài)開(kāi)辟和釋放空間,其中new與C中malloc函數(shù)的功能相似,delete與C中free函數(shù)的功能相似。用C++實(shí)現(xiàn)變長(zhǎng)二維數(shù)組時(shí)可以采用兩種方法:雙指針?lè)椒ê褪褂肧TL中vector(向量)的方法。??
???
? 首先介紹一下雙指針?lè)椒?#xff0c;在這里雙指針就是指像指針的指針,比如你可以這樣聲明一個(gè)數(shù)組:??
? int?? **p?? =?? new?? int*[num1];??
? 而對(duì)每一個(gè)*p(一共num1個(gè)*p)申請(qǐng)一組內(nèi)存空間:??
? for(int?? i=0;?? i<num1;?? ++i)??
??? p[i]?? =?? new?? int[num2];??
? 其中,num1是行數(shù),num2是數(shù)組的列數(shù)。測(cè)試的源程序如下:??
???
? //文件名:?? array04.cpp??
? #include?? <iostream>??
? #include?? <iomanip>??
? using?? namespace?? std;??
???
? int?? main()??
? {??
??? int?? num1,//行數(shù)??
??????????? num2;//列數(shù)??
???
??? cout<<"Please?? enter?? the?? number?? for?? row?? and?? column:?? "<<endl;??
??? cin?? >>?? num1?? >>?? num2;??
???
??? //為二維數(shù)組開(kāi)辟空間??
??? int?? **p?? =?? new?? int*[num1];??
??? for(int?? i=0;?? i<num1;?? ++i)??
????? p[i]?? =?? new?? int[num2];??
???
??? for(int?? j=0;j<num1;j++)??
??? {??
????? for(int?? k=0;k<num2;k++)??
????? {??
??????? p[j][k]=(j+1)*(k+1);??
??????? cout<<setw(6)<<p[j][k]<<':'<<setw(8)<<&p[j][k];??
????? }??
????? cout<<endl;??
??? }??
???
??? //釋放二維數(shù)組占用的空間??
??? for(int?? m=0;m<num1;m++)??
????? delete[]?? p[m];??
??? delete[]?? p;??
???
??? return?? 0;??
? }??
???
? 以下是運(yùn)行結(jié)果:??
???
? Please?? enter?? the?? number?? for?? row?? and?? column:??
? 4?? 5??
??????????? 1:004915F0?????????? 2:004915F4?????????? 3:004915F8?????????? 4:004915FC?????????? 5:00491600??
??????????? 2:00491180?????????? 4:00491184?????????? 6:00491188?????????? 8:0049118C???????? 10:00491190??
??????????? 3:00491140?????????? 6:00491144?????????? 9:00491148???????? 12:0049114C???????? 15:00491150??
??????????? 4:00491100?????????? 8:00491104???????? 12:00491108???????? 16:0049110C???????? 20:00491110??
? Press?? any?? key?? to?? continue??
???
? 程序清單array04.cpp可以顯示分配的內(nèi)存空間單元的地址,大家可以看到,由于數(shù)組空間是動(dòng)態(tài)分配的,數(shù)組行之間的地址空間是不連續(xù)的,因?yàn)椴煌械臄?shù)組元素的地址空間是用不同的new來(lái)分配的。而每一行之中列之間的地址空間是連續(xù)的。??
???
? 那么用vector(向量)怎樣實(shí)現(xiàn)二維數(shù)組呢?以下給出源程序:??
???
? //文件名:?? array05.cpp??
? #include?? <iostream>??
? #include?? <vector>??
? #include?? <iomanip>??
? using?? namespace?? std;??
? int?? main()??
? {??
??? int?? i,??
??????????? j,??
??????????? m,?? //行數(shù)??
??????????? n;?? //列數(shù)??
???
??? cout?? <<?? "input?? value?? for?? m,n:";??
??? cin>>m>>n;??
?????
??? //注意下面這一行:vector<int后兩個(gè)">"之間要有空格!否則會(huì)被認(rèn)為是重載">>"。??
??? vector<vector<int>?? >?? vecInt(m,?? vector<int>(n));??????
??? for?? (i?? =?? 0;?? i?? <?? m;?? i++)??
????? for?? (j?? =?? 0;?? j?? <?? n;?? j++)??
??????? vecInt[i][j]?? =?? i*j;????
?????????
??? for?? (i?? =?? 0;?? i?? <?? m;?? i++)??
??? {??
????? for?? (j?? =?? 0;?? j?? <?? n;?? j++)??
??????? cout<<setw(5)<<vecInt[i][j]<<":"<<setw(9)<<&vecInt[i][j];??
????? cout<<endl;??
??? }??????
??? return?? 0;??
? }??
???
? 以下是運(yùn)行結(jié)果:??
???
? input?? value?? for?? m,n:3?? 4??
????????? 0:?? 00491180???????? 0:?? 00491184???????? 0:?? 00491188???????? 0:?? 0049118C??
????????? 0:?? 00491140???????? 1:?? 00491144???????? 2:?? 00491148???????? 3:?? 0049114C??
????????? 0:?? 00491100???????? 2:?? 00491104???????? 4:?? 00491108???????? 6:?? 0049110C??
? Press?? any?? key?? to?? continue??
???
? 大家可以看到,這里vector中元素的內(nèi)存的地址分配也有同雙指針實(shí)現(xiàn)的二維數(shù)組有同樣的特點(diǎn)。不過(guò)用vector的方法比使用雙指針簡(jiǎn)單地多,分配內(nèi)存空間時(shí)會(huì)更安全,數(shù)組初始化代碼也更簡(jiǎn)單,所以本人建議使用STL中的vector來(lái)實(shí)現(xiàn)變長(zhǎng)多維數(shù)組。以下是一個(gè)變長(zhǎng)三維數(shù)組:)??
???
? //文件名:?? array06.cpp??
? #include?? <iostream>??
? #include?? <vector>??
? #include?? <iomanip>??
? using?? namespace?? std;??
? int?? main()??
? {??
??? int?? i,??
????? j,??
????? k,??
????? m,?? //一維坐標(biāo)??
????? n,?? //二維坐標(biāo)??
????? l;?? //三維坐標(biāo)??????????
???
??? cout?? <<?? "input?? value?? for?? m,n,l:";??
??? cin>>m>>n>>l;??
??? vector<vector<vector<int>?? >?? >?? vecInt(m,?? vector<vector<int>?? >(n,?? vector<int>(l)));??????
??? for?? (i?? =?? 0;?? i?? <?? m;?? i++)??
????? for?? (j?? =?? 0;?? j?? <?? n;?? j++)??
??????? for(k?? =?? 0;?? k?? <?? l;?? k++)??
????????? vecInt[i][j][k]?? =?? i+j+k;????
?????????
??? for?? (i?? =?? 0;?? i?? <?? m;?? i++)??
??? {??
????? for?? (j?? =?? 0;?? j?? <?? n;?? j++)??
????? {??
??????? for(k?? =?? 0;?? k<l;?? k++)??
????????? cout<<setw(5)<<vecInt[i][j][k]<<":"<<setw(9)<<&vecInt[i][j][k];??
??????? cout<<endl;??
????? }??
????? cout<<endl;??
??? }??
???
??? return?? 0;??
? }??
???
? 運(yùn)行結(jié)果:??
? input?? value?? for?? m,n,l:2?? 3?? 4??
????????? 0:?? 00492FE0???????? 1:?? 00492FE4???????? 2:?? 00492FE8???????? 3:?? 00492FEC??
????????? 1:?? 00492FA0???????? 2:?? 00492FA4???????? 3:?? 00492FA8???????? 4:?? 00492FAC??
????????? 2:?? 00492F60???????? 3:?? 00492F64???????? 4:?? 00492F68???????? 5:?? 00492F6C??
???
????????? 1:?? 00492EC0???????? 2:?? 00492EC4???????? 3:?? 00492EC8???????? 4:?? 00492ECC??
????????? 2:?? 00492E80???????? 3:?? 00492E84???????? 4:?? 00492E88???????? 5:?? 00492E8C??
????????? 3:?? 00492E40???????? 4:?? 00492E44???????? 5:?? 00492E48???????? 6:?? 00492E4C
???
? 這里說(shuō)的變長(zhǎng)數(shù)組是指在編譯時(shí)不能確定數(shù)組長(zhǎng)度,程序在運(yùn)行時(shí)需要?jiǎng)討B(tài)分配內(nèi)存空間的數(shù)組。實(shí)現(xiàn)變長(zhǎng)數(shù)組最簡(jiǎn)單的是變長(zhǎng)一維數(shù)組,你可以這樣做:??
???
? //文件名:?? array01.cpp??
? #include<iostream>??
? using?? namespace?? std;??
???
? int?? main()??
? {??
??? int?? len;??
??? cin>>len;??
??? //用指針p指向new動(dòng)態(tài)分配的長(zhǎng)度為len*sizeof(int)的內(nèi)存空間??
??? int?? *p=new?? int[len];??
??? ...........??
??? delete[]?? p;??
??? return?? 0;??
? }??
???
? 注意int?? *p=new?? int[len];這一句,你不能這樣做:??
? int?? p[len];??
? C++編譯器會(huì)報(bào)錯(cuò)說(shuō)len的大小不能確定,因?yàn)橛眠@種形式聲明數(shù)組,數(shù)組的大小需要在編譯時(shí)確定。而且這樣也不行:??
? int?? p[]=new?? int[len];??
? 編譯器會(huì)說(shuō)不能把int*型轉(zhuǎn)化為int[]型,因?yàn)橛胣ew開(kāi)辟了一段內(nèi)存空間后會(huì)返回這段內(nèi)存的首地址,所以要把這個(gè)地址賦給一個(gè)指針,所以要用int?? *p=new?? int[len];??
???
? array01.cpp實(shí)現(xiàn)了一個(gè)變長(zhǎng)的一維數(shù)組,但是要養(yǎng)成一個(gè)好習(xí)慣,就是注意要注銷(xiāo)指針p,使程序釋放用new開(kāi)辟的內(nèi)存空間。??
? 當(dāng)然使用C++標(biāo)準(zhǔn)模版庫(kù)(STL)中的vector(向量)也可以實(shí)現(xiàn)變長(zhǎng)數(shù)組:??
???
? //文件名:?? array02.cpp??
? #include<iostream>??
? #include<vector>??
? using?? namespace?? std;??
???
? int?? main()??
? {??
??? int?? len;??
??? cin>>len;??
??? vector<int>?? array(len);//聲明變長(zhǎng)數(shù)組??
???
??? for(int?? i=0;i<len;i++)??
??? {??
????? array[i]=i;??
????? cout<<array[i]<<"\t";??
??? }??
??? return?? 0;??
? }??
???
? 這里的變長(zhǎng)數(shù)組讓我聯(lián)想到了java的java.util包中的vector和C#中的ArrayList,它們也可以在各自的語(yǔ)言中實(shí)現(xiàn)變長(zhǎng)數(shù)組。不過(guò)C++中的vector不能像C#一樣有托管的垃圾回收機(jī)制回收被占用的內(nèi)存空間,但是你可以在使用完vector后調(diào)用~vector()析構(gòu)函數(shù)釋放內(nèi)存。??
???
? 2.變長(zhǎng)n維數(shù)組??
? 變長(zhǎng)的n維數(shù)組實(shí)現(xiàn)起來(lái)有些麻煩,但是在工程與軟件設(shè)計(jì)應(yīng)用中常使用的是二維數(shù)組,所以在這里著重介紹變長(zhǎng)的二維數(shù)組,變長(zhǎng)的n維數(shù)組可以按照類(lèi)似的方法實(shí)現(xiàn)。首先看一個(gè)經(jīng)典的用C實(shí)現(xiàn)變長(zhǎng)二維數(shù)組的例子:??
???
? //文件名:?? array03.c??
? #include???? <stdio.h>??????
? #include???? <malloc.h>??????
?????
? void???? main()??????
?????????????????????????????
? {??????
??????????????????????? int???? x,y,i,j;??????
??????????????????????? float???? **a,*b;??????
??????????????????????????????????????????????? printf("請(qǐng)輸入你所求解的線性方程組的行數(shù)x:x=");??????
??????????????????????? scanf("%d",&x);??????
??????????????????????????????????????????????? printf("請(qǐng)輸入你所求解的線性方程組的列數(shù)y:y=");??????
??????????????????????? scanf("%d",&y);??????
?????
??????????????? a=(float???? **)malloc(sizeof(float???? *)???? *x);??????
??????????????? b=(float???? *)malloc(sizeof(float)???? *x);??????
??????????????????????? for(i=0;i<x;i++)??????
??????????????????????? {??????
??????????????????????????????????????????????? *(a+i)=(float???? *)malloc(sizeof(float)???? *y);??????
??????????????????????? }??????
?????
? /*讀入數(shù)據(jù)*/??????
?????
??????????????????????? printf("請(qǐng)按行的順序依次輸入系數(shù)的值(共%d項(xiàng)):",x*y);??????
??????????????????????? for(i=0;i<=x-1;i++)??????
??????????????????????????????????????????????? for(j=0;j<=y-1;j++)??????
??????????????????????????????????????????????????????????????????????? scanf("%f",&a[i][j]);??????
??????????????????????? printf("請(qǐng)按列的順序依次輸入常數(shù)的值(共%d項(xiàng)):",x);??????
??????????????????????? for(j=0;j<=x-1;j++)??????
??????????????????????????????????????????????????????????????????????? scanf("%f",&b[j]);??????
?????
??????????????????????? printf("您輸入方程組的增廣矩陣為:\n");??????
??????????????????????? for(i=0;i<=x-1;i++)??????
??????????????????????? {??????
??????????????????????????????????????????????? for(j=0;j<=y-1;j++)??????
??????????????????????????????????????????????????????????????????????? printf("%.5f???????? ",a[i][j]);??????
??????????????????????????????????????????????? printf("%.5f???????? ",b[i]);??????
??????????????????????????????????????????????? printf("\n");??????
??????????????????????? }??????
??????????????????????? free(b);??????
??????????????????????? for(i=0;i<x;i++)??????
??????????????????????????????????????????????? free???? (*(a+i));????
? }??
???
? 那么用C++怎樣實(shí)現(xiàn)呢?在C++中可以通過(guò)new和delete運(yùn)算符動(dòng)態(tài)開(kāi)辟和釋放空間,其中new與C中malloc函數(shù)的功能相似,delete與C中free函數(shù)的功能相似。用C++實(shí)現(xiàn)變長(zhǎng)二維數(shù)組時(shí)可以采用兩種方法:雙指針?lè)椒ê褪褂肧TL中vector(向量)的方法。??
???
? 首先介紹一下雙指針?lè)椒?#xff0c;在這里雙指針就是指像指針的指針,比如你可以這樣聲明一個(gè)數(shù)組:??
? int?? **p?? =?? new?? int*[num1];??
? 而對(duì)每一個(gè)*p(一共num1個(gè)*p)申請(qǐng)一組內(nèi)存空間:??
? for(int?? i=0;?? i<num1;?? ++i)??
??? p[i]?? =?? new?? int[num2];??
? 其中,num1是行數(shù),num2是數(shù)組的列數(shù)。測(cè)試的源程序如下:??
???
? //文件名:?? array04.cpp??
? #include?? <iostream>??
? #include?? <iomanip>??
? using?? namespace?? std;??
???
? int?? main()??
? {??
??? int?? num1,//行數(shù)??
??????????? num2;//列數(shù)??
???
??? cout<<"Please?? enter?? the?? number?? for?? row?? and?? column:?? "<<endl;??
??? cin?? >>?? num1?? >>?? num2;??
???
??? //為二維數(shù)組開(kāi)辟空間??
??? int?? **p?? =?? new?? int*[num1];??
??? for(int?? i=0;?? i<num1;?? ++i)??
????? p[i]?? =?? new?? int[num2];??
???
??? for(int?? j=0;j<num1;j++)??
??? {??
????? for(int?? k=0;k<num2;k++)??
????? {??
??????? p[j][k]=(j+1)*(k+1);??
??????? cout<<setw(6)<<p[j][k]<<':'<<setw(8)<<&p[j][k];??
????? }??
????? cout<<endl;??
??? }??
???
??? //釋放二維數(shù)組占用的空間??
??? for(int?? m=0;m<num1;m++)??
????? delete[]?? p[m];??
??? delete[]?? p;??
???
??? return?? 0;??
? }??
???
? 以下是運(yùn)行結(jié)果:??
???
? Please?? enter?? the?? number?? for?? row?? and?? column:??
? 4?? 5??
??????????? 1:004915F0?????????? 2:004915F4?????????? 3:004915F8?????????? 4:004915FC?????????? 5:00491600??
??????????? 2:00491180?????????? 4:00491184?????????? 6:00491188?????????? 8:0049118C???????? 10:00491190??
??????????? 3:00491140?????????? 6:00491144?????????? 9:00491148???????? 12:0049114C???????? 15:00491150??
??????????? 4:00491100?????????? 8:00491104???????? 12:00491108???????? 16:0049110C???????? 20:00491110??
? Press?? any?? key?? to?? continue??
???
? 程序清單array04.cpp可以顯示分配的內(nèi)存空間單元的地址,大家可以看到,由于數(shù)組空間是動(dòng)態(tài)分配的,數(shù)組行之間的地址空間是不連續(xù)的,因?yàn)椴煌械臄?shù)組元素的地址空間是用不同的new來(lái)分配的。而每一行之中列之間的地址空間是連續(xù)的。??
???
? 那么用vector(向量)怎樣實(shí)現(xiàn)二維數(shù)組呢?以下給出源程序:??
???
? //文件名:?? array05.cpp??
? #include?? <iostream>??
? #include?? <vector>??
? #include?? <iomanip>??
? using?? namespace?? std;??
? int?? main()??
? {??
??? int?? i,??
??????????? j,??
??????????? m,?? //行數(shù)??
??????????? n;?? //列數(shù)??
???
??? cout?? <<?? "input?? value?? for?? m,n:";??
??? cin>>m>>n;??
?????
??? //注意下面這一行:vector<int后兩個(gè)">"之間要有空格!否則會(huì)被認(rèn)為是重載">>"。??
??? vector<vector<int>?? >?? vecInt(m,?? vector<int>(n));??????
??? for?? (i?? =?? 0;?? i?? <?? m;?? i++)??
????? for?? (j?? =?? 0;?? j?? <?? n;?? j++)??
??????? vecInt[i][j]?? =?? i*j;????
?????????
??? for?? (i?? =?? 0;?? i?? <?? m;?? i++)??
??? {??
????? for?? (j?? =?? 0;?? j?? <?? n;?? j++)??
??????? cout<<setw(5)<<vecInt[i][j]<<":"<<setw(9)<<&vecInt[i][j];??
????? cout<<endl;??
??? }??????
??? return?? 0;??
? }??
???
? 以下是運(yùn)行結(jié)果:??
???
? input?? value?? for?? m,n:3?? 4??
????????? 0:?? 00491180???????? 0:?? 00491184???????? 0:?? 00491188???????? 0:?? 0049118C??
????????? 0:?? 00491140???????? 1:?? 00491144???????? 2:?? 00491148???????? 3:?? 0049114C??
????????? 0:?? 00491100???????? 2:?? 00491104???????? 4:?? 00491108???????? 6:?? 0049110C??
? Press?? any?? key?? to?? continue??
???
? 大家可以看到,這里vector中元素的內(nèi)存的地址分配也有同雙指針實(shí)現(xiàn)的二維數(shù)組有同樣的特點(diǎn)。不過(guò)用vector的方法比使用雙指針簡(jiǎn)單地多,分配內(nèi)存空間時(shí)會(huì)更安全,數(shù)組初始化代碼也更簡(jiǎn)單,所以本人建議使用STL中的vector來(lái)實(shí)現(xiàn)變長(zhǎng)多維數(shù)組。以下是一個(gè)變長(zhǎng)三維數(shù)組:)??
???
? //文件名:?? array06.cpp??
? #include?? <iostream>??
? #include?? <vector>??
? #include?? <iomanip>??
? using?? namespace?? std;??
? int?? main()??
? {??
??? int?? i,??
????? j,??
????? k,??
????? m,?? //一維坐標(biāo)??
????? n,?? //二維坐標(biāo)??
????? l;?? //三維坐標(biāo)??????????
???
??? cout?? <<?? "input?? value?? for?? m,n,l:";??
??? cin>>m>>n>>l;??
??? vector<vector<vector<int>?? >?? >?? vecInt(m,?? vector<vector<int>?? >(n,?? vector<int>(l)));??????
??? for?? (i?? =?? 0;?? i?? <?? m;?? i++)??
????? for?? (j?? =?? 0;?? j?? <?? n;?? j++)??
??????? for(k?? =?? 0;?? k?? <?? l;?? k++)??
????????? vecInt[i][j][k]?? =?? i+j+k;????
?????????
??? for?? (i?? =?? 0;?? i?? <?? m;?? i++)??
??? {??
????? for?? (j?? =?? 0;?? j?? <?? n;?? j++)??
????? {??
??????? for(k?? =?? 0;?? k<l;?? k++)??
????????? cout<<setw(5)<<vecInt[i][j][k]<<":"<<setw(9)<<&vecInt[i][j][k];??
??????? cout<<endl;??
????? }??
????? cout<<endl;??
??? }??
???
??? return?? 0;??
? }??
???
? 運(yùn)行結(jié)果:??
? input?? value?? for?? m,n,l:2?? 3?? 4??
????????? 0:?? 00492FE0???????? 1:?? 00492FE4???????? 2:?? 00492FE8???????? 3:?? 00492FEC??
????????? 1:?? 00492FA0???????? 2:?? 00492FA4???????? 3:?? 00492FA8???????? 4:?? 00492FAC??
????????? 2:?? 00492F60???????? 3:?? 00492F64???????? 4:?? 00492F68???????? 5:?? 00492F6C??
???
????????? 1:?? 00492EC0???????? 2:?? 00492EC4???????? 3:?? 00492EC8???????? 4:?? 00492ECC??
????????? 2:?? 00492E80???????? 3:?? 00492E84???????? 4:?? 00492E88???????? 5:?? 00492E8C??
????????? 3:?? 00492E40???????? 4:?? 00492E44???????? 5:?? 00492E48???????? 6:?? 00492E4C
總結(jié)
以上是生活随笔為你收集整理的C++动态数组(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网页编程中的模态对话框
- 下一篇: 年轻人不通人情世故的C++短处中