C++:Vector动态数组的copy深入理解

     动态数组分配的大小默认为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<<"=================="<

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