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.