C++vector日記

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ù)一樣,也有最大上限

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容