C++ 用變量定義數組


較早的編譯器是不同意這樣做的,所以一些書籍比方以Tc解說的書本都說數組的下標不能是變量。在vc6.0下亦是如此。

只是在一些較新的編譯器如dev c++已經支持了,例如以下代碼不會報錯

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 4 {
 5 int a; int i;
 6 scanf("%d",&a);
 7 int c[a];
 8 for( i =0 ;i<a;i++)
 9 scanf("%d",&c[i]);
10 for( i =0 ;i<a;i++)
11 printf("%d",c[i]);
12 }
View Code

 

 

如果想用變量定義數組有很多種方式

首先可以使用指針:

一維:

1 cin>>n;
2 
3 int* a=new int[n];
4 
5    if ((a) == NULL)
6 
7     {
8         //動態分配失敗
9     }    
View Code

 

可是new出來的一定不要忘了delete掉
delete []a; // 正確的使用方法
delete a; // 錯誤的使用方法
后者相當於delete a[0],漏掉了另外n-1個對象。

 

 

二維:

1 //設有m行n列
2 cin>>m>>n;
3 int **a = new int* [m];
4 for(int i = 0; i < m; i++)
5 {
6        a[i] = new int [n];
7 }
View Code

這樣就相當於產生了一個二維數組a[m][n]了,可是對於我們平時聲明的數組a[m][n],a[i][j]=a[i*n+j],由於是連續的一片內存,而這樣動態聲明的數組隨意的a[k]都是一個int*類型,即一個地址了,

所以僅僅能a[i][j]或者*(*(a+i)+j)來訪問數組的元素,而不能a[i*n+j]這樣轉換着用。

 

1 //釋放內存:
2 for(int i = 0; i < m; ++i)
3 
4 {
5 
6   delete []a[i];
7 }
8 delete []a;
釋放內存

 

 

 

還有就是使用STL容器

之所以動態聲明數組,相比是大小不確定,聲明太大了怕浪費空間,而vector就不用指定大小,當存的數據變多,自己主動擴大容量,比方如果vector默認大小是8,當你再往里存第9個元素時,容器自己主動擴容,變為16,16再不夠用,擴為32,2倍2倍的增長,這樣就依據須要擴容,不會浪費空間,也能夠像普通數組那樣直接指定vector的大小,總之普通數組能夠的它都能夠,普通數組沒有的它更有。

 

第一種方法

 1 #include <string.h>
 2 #include <vector>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6  
 7  
 8 int main()
 9 {
10     int N=5, M=6; 
11     vector<vector<int> > obj(N); //定義二維動態數組大小5行 
12     for(int i =0; i< obj.size(); i++)//動態二維數組為5行6列,值全為0 
13     { 
14         obj[i].resize(M); 
15     } 
16  
17     for(int i=0; i< obj.size(); i++)//輸出二維動態數組 
18     {
19         for(int j=0;j<obj[i].size();j++)
20         {
21             cout<<obj[i][j]<<" ";
22         }
23         cout<<"\n";
24     }
25     return 0;
26 }

 

 

第二種方法

 1 #include <string.h>
 2 #include <vector>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6  
 7  
 8 int main()
 9 {
10     int N=5, M=6; 
11     vector<vector<int> > obj(N, vector<int>(M)); //定義二維動態數組5行6列 
12  
13     for(int i=0; i< obj.size(); i++)//輸出二維動態數組 
14     {
15         for(int j=0;j<obj[i].size();j++)
16         {
17             cout<<obj[i][j]<<" ";
18         }
19         cout<<"\n";
20     }
21     return 0;
22 }

 

以上就是動態數組的定義方法啦。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM