码迷,mamicode.com
首页 > 其他好文 > 详细

Cpp_vector_Optimizing the usage of std::vector(vector的优化)

时间:2020-03-15 17:35:55      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:程序   img   push   ons   速度   基础上   png   方法   cto   

vector optimizing

本文是看了Youtube上Cherno老师的操作来写的总结

学过Cpp11的人应该都对于vector容器不陌生,但是我们在使用它的时候,是不是忽略一些什么?
因为它是c++11新添加的容器,我们就理所当然的认为它的速度是很快的,但是,我们没有意识到它其实在某些方面拖慢了整个程序,例如以下例子

struct  Vertex
{
    float x, y, z;

    Vertex(float x, float y, float z)
        :x(x), y(y), z(z)
    {
    }

    Vertex(const Vertex& vertex)
        :x(vertex.x), y(vertex.y), z(vertex.z)
    {
        std::cout << "Copied!" << std::endl;
    }
};

int main()
{
    std::vector<Vertex> vertices;


    vertices.push_back(Vertex({ 1,2,3 }));
    vertices.push_back(Vertex({ 4,5,6 }));
    vertices.push_back(Vertex({ 7,8,9 }));

    std::cin.get();
}

在main函数三句push_back中,我们使用了vertex的构造函数并且我们又将其放入到了vector当中那我们先按照以往的经验,拷贝构造函数应该调用多少次,按照以前的经验应该是三次,因为总共有三次初始化,但是实际上呢,却是六次。这是为什么呢?
技术图片

这其实是因为vector的空间增长机制,每当空间不够时,就会在空间重新开辟一次,并且再复制过去,这样的过程中,就是进行了多三次的拷贝。
那么我们消除这三次就应该,使用vector.reserve()预留一片空间,那么就不会出现这种问题。
优化到这里,肯定以为结束了,结果Cherno老师在这基础上加了一种emplace_back的方法,使其不用调用拷贝构造,而是就地构造,更快的放入。

Cpp_vector_Optimizing the usage of std::vector(vector的优化)

标签:程序   img   push   ons   速度   基础上   png   方法   cto   

原文地址:https://www.cnblogs.com/Yekko/p/12498664.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!