1. 欲使用向量,必須先在標頭檔寫入 #include <vector>
2. 在記憶空間上,向量的每個元素之間所佔的記憶空間是相鄰的(這點和矩陣相同)。但為使向量可以隨時加入元素,一個向量所使用的記憶空間便不是恆定的。
向量所佔有的記憶空間分為兩種:一為既用空間,即向量既有元素所佔有的空間。一為預留空間,即向量在建構時預留給元素用的空間(既用空間+尚未用到的空間)。若加入的元素溢出了預留空間,系統會自動將向量搬移至與更多空白空間連接的空間,並且增加預留空間以供更多元素加入。
3. 向量的建構有許多方式:
vector<資料形態> 向量名稱 ; //建構向量,但不設向量大小與初始值
vector<資料形態> 向量名稱(n) ; //建構向量,設向量大小為可容納n個元素
vector<資料形態> 向量名稱(n, 資料值) ; //建構向量,設向量大小為可容納n個元素,且每個元素都是資料值。如:vector<int> V1(10, 5); vector<char> V2(10,’a’)
註:資料型態不只可為一般常見的資料形態,如int、string、bool、double…等,也可以為結構物件或者類別物件。不過物件必須寫在主程式之前:
class person //建構類別person
{
public:
string name;
int age;
person(string name_,int age_,int money_)
{name=name_;age=age_; money = money_;}
private:
int money;
};
void main( ){ //主程式在此
person person1("wiewie",18,2000);
person person2("nunu",19,2500);
person person3("ting",23,1800);
vector<person> a; //建立存放person物件的向量a
vector<person>::iterator i; //宣告存放person物件之向量的迭代器i(請參看迭代器篇)
a.push_back(person1);
a.push_back(person2);
a.push_back(person3);
for(i=a.begin();i!=a.end();i++)
{cout<<(*i).name<<",";} //顯示:weiwei,nunu,ting,
}
註一:cout<<(*i).name<<",";若是寫成cout<<*i.name<<",";,編譯器會以為是cout<<*(i.name)<<",";,即會發生編譯錯誤。
註二:二維向量之宣告法為:
vector< vector<資料形態> > 向量名稱;
要注意的是,>與>必須要用空白字元隔開,如果寫成>>,編譯器會以為這是輸入運算子,而產生錯誤。
留言列表