C++|47.动态数组 48.C++的std:vector使用优化

动态数组

动态数组叫vector,也是一种定义好的类/数据结构。“定义好”意味着
vector处在std命名空间之中。
vector的存在代表着一种可以调用的数据结构,不用
动态的意思是可以将该数组的大小进行动态调整。
也就意味着起初vector是没有固定大小的。
它是随着元素的加入而动态进行调整的。

动态调整——复制

如果此时通过push_back()向vector新添入一个元素,导致内存没有足够的空间去分配给这个新元素,则会将vector内部的元素整体搬运/复制到一个新的空间中,而这是需要消耗时间的。
而这是导致代码拖慢的原因之一。
C++|47.动态数组 48.C++的std:vector使用优化_第1张图片
注意构造函数在构造一个新的对象的时候会自动触发构造函数内部的函数部分。
也就是说,一旦构造一个对象成功的话,就会输出一次“Copied”。

C++|47.动态数组 48.C++的std:vector使用优化_第2张图片
使用Vertex(1,2,3)会先在所在main函数所在的栈空间构造Vertex,再复制副本塞入到vertices里面去。(当vecrtives需要变换存放的内存位置时,需要将重新复制main栈帧中的样本)
C++|47.动态数组 48.C++的std:vector使用优化_第3张图片
此时vector能提供的大小只有2,也就意味着当塞入第三个元素到vector里面去的时候,需要复制前面已经存放到vector的两个元素连同新压入的元素一同到vector里面去。
于是会出现1+2+3次构造(输出六次“Copied”)

优化策略

使用reverse提前确定好vector的大小

C++|47.动态数组 48.C++的std:vector使用优化_第4张图片
reserve并没有创建三个个体,二是确保对应的vector有存放三个个体的空间。

避免在main函数的复制过程,直接传入参数到vector内进行复制。

使用emplace_back()去替代push_back()使得传入的是参数。
C++|47.动态数组 48.C++的std:vector使用优化_第5张图片

C++|47.动态数组 48.C++的std:vector使用优化_第6张图片
C++|47.动态数组 48.C++的std:vector使用优化_第7张图片

C++|47.动态数组 48.C++的std:vector使用优化_第8张图片

C++|47.动态数组 48.C++的std:vector使用优化_第9张图片

你可能感兴趣的:(c++,开发语言)