c++學習筆記(六)- vector使用和記憶體配置

來源:互聯網
上載者:User

標籤:建議   www.   es2017   改變   留空   9.png   span   c++   pre   

1. 定義

vector 是C++容器種特別常用的一種,用法:vector<int> a;c++11裡定義了6種建構函式。

    int aNum[10] = { 1, 3, 5, 6, 9, 11, 13, 15, 17, 19 };        vector<int> myVector(2,1);        //定義一個2個元素的vector,並初始化為1    for (auto it = myVector.begin(); it != myVector.end(); it++)        cout << *it << ‘ ‘;    cout << endl;    //用數組aNum的值初始化vector    vector<int> myNum(aNum, aNum + sizeof(aNum) / sizeof(int));    for (auto it = myNum.begin(); it != myNum.end(); it++)        cout << *it << ‘ ‘;    cout << endl;    //截取myNum的後半部分    int medium = myNum.size() / 2;    vector<int> new_nums((myNum.begin() + medium), myNum.end());    for (auto it = new_nums.begin(); it != new_nums.end(); it++)        cout << *it << ‘ ‘;    cout << endl;

輸出:

 

2. insert

根據 c++ STL中的vector在記憶體中的分配與釋放,vector內容和數組一樣,是連續分配記憶體空間的,不同的是,在給vector分配記憶體時,會比實際需要的多一些,預留出以後插入的空間。

根據 c++ reference, 對vector.insert的描述,當向vector的末尾(vector.end())插入時,直接插入就好了,除非預留空間不夠,才會重新分配記憶體。

如果向vector中間的某個位置插入,那麼,由於vector的底層實現還是數組,插入點以後的所有節點都需要重新分配記憶體。

這樣操作效率很低,所以如果需要向序列中間插入元素,c++ reference建議使用鏈表。

3. size

myVector.size()返回vector裡有多少個有效元素,不是vector實際佔用的儲存空間。

myVector.resize(n,val)改變的是vector包含有效元素的個數,如果n<ori,直接扔掉多的那些;n>ori,末尾增加n-ori個新元素,根據val值初始化。如果n超過了capacity,要重新分配記憶體。

myVector.capacity返回給vector分配的儲存空間。

 

c++學習筆記(六)- vector使用和記憶體配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.