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

Posted yekko

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cpp_vector_Optimizing the usage of std::vector(vector的优化)相关的知识,希望对你有一定的参考价值。

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的优化)的主要内容,如果未能解决你的问题,请参考以下文章

Read the ads,Match the titles with the

simplify the design of the hardware forming the interface between the processor and thememory system

Word2010 Error:The name in the end tag of the element must match the element type in the start tag.

Word2010 Error:The name in the end tag of the element must match the element type in the start tag.

the major advances since the birth of the computer

The more... the more句型