論STL的動態數組vector的基本應用
STL,就是c++的標準數據庫,今天要講的就是附屬與它的vector的基本應用。
個人來說,我認為這個東東基本上沒有什麽用,但是總歸得看懂吧。。。
這是一個動態的數組,可以隨時定義它的大小(長度)
除了用萬能頭文件(bits/stdc++.h)的人,其它都要加上#include<vector>,如果只用BITS時報錯,那就把這個加上吧。
定義位置:和定義普通數組一樣。
定義方法:vector<數組類型名>數組名;
如果想定義多維數組,可以:vector<vector<數組類型名> >數組名;
註意,數組類型名後的兩個> >中必須有空格,否則編譯器將把它當作>>右移運算處理。
這是二維的,如果想更多維,可以將數組類型名改為vector<>,這個東東是可以嵌套的。
定義好了的數組,是從0開始的,並且長度為零,如何設置長度呢?
一維數組:
//若長度為n,數組名為a。
a.resize(n);
//好了,這是一個從0-(n-1)的數組,如何操作後面再說。
二位數組:
//若要大小為n*n,數組名為a。
a.resize(n);//這樣第一維的長度就定好了
for(int i=0;i<n;i++)a[i].resize(n);//這樣每一行的維度就都設置好了,就像二維數組了。過程如圖示:
三位及以後,只要多重循環就行了,本人就不多講了。
定義好了數組後,我們就要想如操作它了,以下介紹兩種方法:
1、普通數組操作
for (int i=0;i<n;i++)scanf("%d",&a[i]);
就像普通數組一樣操作。
2、叠代器操作
for (vector<和你要操作的數組一個類型(包括多維)>::iterator 循環變量名=要操作數組名.begin();循環變量名<要操作數組名.end();循環變量名++)scanf("%d",&(*循環變量名));
如果是多維,額(⊙o⊙)…我就沒研究啦。
樣例:
讀入n(回車)1 2 3 4 5,輸出1 2 3 4 5。
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
scanf("%d",&n);
vector<int>a;
a.resize(n);
for ( vector<int>::iterator it=a.begin();it!=a.end();++it ) scanf("%d",&(*it));
for ( vector<int>::iterator it=a.begin();it!=a.end();++it ) printf("%d ",(*it));
return 0;
}
既然會使用了,那也要會用,下面介紹幾種關於它的基本操作。
以下所講的函數,都是以要操作的數組名.函數名()來操作的,就算()裏為空,也得加上括號。
1、push_back(n);//將n添加在數組最後(長度會自動加)
2、pop_back();//清除數組最後的一個元素。
3、clear();//野蠻的將整個的長度清零,內容清零
4、insert(位置(從0開始),內容);在位置前插入內容。
整節課就講完啦!接下有一道練習題,大家可以做做。
蛇形方陣
【問題描述】
輸入n,n≤100。輸出n階蛇形方陣。例如n=5時,輸出如下:
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25
答案
論STL的動態數組vector的基本應用