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提高性能.

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