动态数组分配的大小默认为2的n次方1,2,4,8...
在main中创建的vertices,push需要放到Vertex中(copy),下一次copy是因为要调整vertices的大小
vertices.push_back(Vertex(1,2,3));//拷贝 第一次,容量为1,拷贝进去,调用一次
vertices.push_back(Vertex(4,5,6));//拷贝 第二次,容量调整为2(包含了新的数组内容),copy一次,再拷贝旧的容量1到 新的容量为2的数组里面,调用一次 共两次copy
vertices.push_back(Vertex(7,8,9));//拷贝 第三次,容量调整为4包含了新的数组内容),copy一次,拷贝旧的容量2里面的两次数字,调用两次 共两次copy
vertices.push_backVertex(10,11,12));//拷贝 第四次,拷贝新的数组到容量4里面去,调用两次 共1次copy
题外话:我觉得理解这个蛮重要的!理解怎么运作才可以优化~
#include
#include
#include
//动态数组的优化
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)//每次拷贝一个数组x,y,z
{
std::cout<<"copy"<vertices;//定义一个动态大小的数组 内存连续
std::vectorvertices2;
//普通方法
//动态数组分配的大小默认为2的n次方1,2,4,8...
//在main中创建的vertices,push需要放到Vertex中(copy),下一次copy是因为要调整vertices的大小
vertices.push_back(Vertex(1,2,3));//拷贝 第一次,容量为1,拷贝进去,调用一次
vertices.push_back(Vertex(4,5,6));//拷贝 第二次,容量调整为2(包含了新的数组内容),copy一次,再拷贝旧的容量1到 新的容量为2的数组里面,调用一次 共两次copy
vertices.push_back(Vertex(7,8,9));//拷贝 第三次,容量调整为4包含了新的数组内容),copy一次,拷贝旧的容量2里面的两次数字,调用两次 共两次copy
vertices.push_back(Vertex(10,11,12));//拷贝 第四次,拷贝新的数组到容量4里面去,调用两次 共1次copy
std::cout<<"=================="<