STL標(biāo)準(zhǔn)容器vector,動(dòng)態(tài)數(shù)組。
如果類A只有帶參構(gòu)造函數(shù)如A(int n),這時(shí)A *arr=new A[],這個(gè)不好弄,直接丟到vector去弄成動(dòng)態(tài)數(shù)組
int main()
{
//幾個(gè)重載構(gòu)造函數(shù)
int arr[]={1,2,3,4,5};
vector<int> first; //空的
vector<int> second(4,100); //新建4個(gè)元素,全部賦值為100
//↑對(duì)上面提到的類A,理所當(dāng)然的如vector<A> second(4,A(100) );之類
vector<int> third (second.begin(),second.end()); //參數(shù)為second的迭代器包括的范圍
vector<int> fourth(arr,arr+5); //數(shù)組類似,在arr~arr+5范圍內(nèi),左開右閉[arr,arr+5)
//↑也能直接:vector<int> fourth={1,2,3,4,5};
vector<int> fifth (fourth); //復(fù)制第4個(gè)vector
vector<int> sixth(100); //初始容量為100,與size()含義不同
//容易忘記的方法
vector<int> v;
v.reserve(100); //重分配容量為100,只有大于capacity時(shí)才會(huì)實(shí)際執(zhí)行重分配
v.swap(fifth); //把v與fifth的內(nèi)容交換,數(shù)組交換的意思
v.emplace(10); //不指定插入位置則同insert默認(rèn)放到最后,能使用構(gòu)造函數(shù)新建對(duì)象插入
int a1 = v.front(); //返回第一個(gè)元素v[0]
int a2 = v.back(); //返回最后一個(gè)元素v[v.size()-1]
vector<int>::iterator iter = v.begin(); //返回開頭的迭代器
//↑另外cbegin(),rbegin()等,c意味const,r意味從右開始,即end()
v.push_back(10); v.pop_back(); //前:加入至尾部,后:刪除最后一元素
//↑借這兩個(gè)方法和v.back()即可當(dāng)棧stack來用,后進(jìn)先出
make_heap (v.begin(),v.end());//形成最大(默認(rèn))堆,下面操作的基礎(chǔ),v[0]為最大值
int ans=v.front(); //取值
pop_heap(v.begin(),v.end()); v.pop_back();
//↑前:把v[0]丟最后,后:刪除最后元素。組合起來就是取最大堆的頂元素
v.push_back(ans); push_heap(v.begin(),v.end());
//↑把a(bǔ)ns放到尾部,再形成最大堆結(jié)構(gòu)。組合起來就是最大堆的插入元素
}
另外,最大堆最小堆也可由<queue>的優(yōu)先隊(duì)列priority_queue完成,更方便。另外值得記住size大于capacity時(shí),capacity增加為1.5倍原容量,而且vector也像string有最大字符數(shù)一樣,也有最大上限