vector的性能利器-reserve

vector是c++編程中的最常見的容器之一,可以幫助用戶自動管理存儲空間,需要分配存儲空間的場景,可以取代原生數組.

vector在實踐的過程中,提升性能的要點就是儘量使用reserve,運行期能確定個數,應該用reserve,不建議用傳遞大小的數組構造函數或者調用resize

爲什麼不建議使用resize

reserveresize函數都能分配足夠容納下指定個數對象的空間.不同的是resize會改變數組的size,並且會調用對象的構造函數.reserve:只是分配所需要的空間

在常規的情況下,默認生成的對象最後都會被覆蓋掉,如果存儲類型的構造函數比較複雜,會以大代價做無用功的

reserve只是分配所需要的內存

#include <iostream>
#include <vector>


class Foo {
    public:
        Foo() {
            std::cout << "Foo constructor" << std::endl;
        }
};

int main(int argc, char* argv[]) {
    std::cout << "initialize vector with element number..." << std::endl;
    std::vector<Foo> vec1(5);
    std::cout << "-------------" << std::endl;
    std::cout << "vec1 size:" << vec1.size() << std::endl << std::endl;

    std::cout << "vector resize..." << std::endl;
    std::vector<Foo> vec2;
    vec2.resize(5);
    std::cout << "-------------" << std::endl;
    std::cout << "vec2 size:" << vec2.size() << std::endl << std::endl;


    std::cout << "vector reserve..." << std::endl;
    std::vector<Foo> vec3;
    vec3.reserve(5);
    std::cout << "-------------" << std::endl;
    std::cout << "vec3 size:" << vec3.size() << std::endl << std::endl;

    return 0;
}

調用結果是

在這裏插入圖片描述

總結:

resizereserve的區別爲 reserve申請一塊大內存,什麼都沒有,但是resize會得到一個個鮮活的對象.

使用vector儘量用reserver提高性能.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章