用vector取代C-style的數(shù)組 提起數(shù)組,大家想必都很熟悉,,你可以用索引和指針來操作數(shù)組,,給程序設(shè)計帶來了很大的靈活性,。但是你知道它有許多天生的缺陷嗎? 首先,,數(shù)組的越界可能會引起程序的崩潰(如果崩潰了,,還算你走運^_^)。其次是動態(tài)性不好,,包括動態(tài)改變大小,,動態(tài)申請。諸如此類的事,,一定會讓你傷透腦筋,。有什么辦法可以解決這些問題嗎? 你不用擔(dān)心,,下面我來給大家介紹一種方法:用vector取代C-style的數(shù)組,。 關(guān) 于vector我不想多說,我假設(shè)大家都了解temlplate 和 STL,。各位在任何一本C++的書上都可以找的到這些內(nèi)容的(如果沒有,,那趕快把它扔掉)。那為什么是vector呢,?我們知道vector提供了 operator[]函數(shù),,可以像數(shù)組一樣的操作,而且還有邊界檢查,,動態(tài)改變大小,。(從這點上deque也是可以的)。vector本來就是可以用來代 替一維數(shù)組的,,這里只介紹用它來代替二維的數(shù)組,。二維以上的可以依此類推。 我們知道,,C++的template參數(shù)是可以嵌套定義的,,你可以這樣定義一個模板的Instance vector<vector<int> > array2(3);//注意>和>之間的空格。 這就是我們的關(guān)鍵,,array2可以保存3個向量,,向量的長度是可以改變的。array2[i]返回的是第i個向量,。同理,,array2[i][j]返回的是第i個向量中的第j個元素。 問題到這里,,你可能會得意的說:"我明白了,,很簡單嗎!",。別急,,還有一些細節(jié)問題:如下 vector<vector<int> > array2(3); array2[1][2]=9; 我 保證你的程序會segement failed,原因就是你沒有指定向量的大小,。用push_back函數(shù)可以解決問題:array2[1].push_back(9);但是好象不太爽。 就不能用operator[]嗎,?答案是肯定的,。不過要多加幾個步驟,如下: for(int i=0;i<3;i++) array2[i].resize(3); 這樣,,你就定義了一個3X3的數(shù)組了(另一個3在 申明時定義的),。而且你可以隨時改變它的大小。 其他的,,你還可以用C++的異常機制來捕獲如下標越界等非法行為,。進行必要的處理。使你的程序更加的健壯,。具體的方法我就不深入介紹了,。留給各位自己鉆研。下面提供一個范例,,供參考,。 #i nclude <iostream> #i nclude <vector> using namespace std; void main() { vector< vector<int> > array(3); for(int i=0;i<3;i++) array[i].resize(3);//設(shè)置數(shù)組的大小3X3 //現(xiàn)在你可以和使用數(shù)組一樣使用這個vector for(int i=0;i<3;i++) for(int j=0;j<3;j++) array[i][j]=(i*j); //輸出 for(int i=0;i<3;i++) { for(int j=0;j<3;j++) cout<<array[i][j]<<" "; cout<<endl; } array.resize(5); arry[3].resize(3); arry[4].resize(3); //現(xiàn)在是5X3的數(shù)組了 for(int i=0;i<5;i++) for(int j=0;j<3;j++) array[i][j]=(i*j); for(int i=0;i<5;i++) { for(int j=0;j<3;j++) cout<<array[i][j]<<" "; cout<<endl; } } |
|
來自: 昵稱10973579 > 《C 》