vector之慎用push

    技术2022-07-14  83

    vector之慎用push_back

    push_back是在vector有效元素的末尾添加新元素,所以首先要明白resize与reserve的区别 先上结论: vec.resize(size)后用push_back,是在vec[size]处开始添加元素,所以resize与push_back不要连用。 resize后,直接通过下标索引的方式改变元素值。 对于大量数据的存储,使用reserve + push_back 的方式,或者resize + 下标索引 的方式。

    1、resize与reserve及vector构造函数的区别 1)resize(int size,int default=0)改变vector的有效空间大小,并对vector空间中每一个单位空间调用构造函数初始化,赋初始值(默认为0),可以直接通过下标索引访问更改vector中的元素 2)reserve(int size)改变vector的总空间(capcity),不对vector空间中每一个单位空间调用构造函数初始化。 3)vector vec(size);当给定size值时,相当于resize,对vec中size个元素初始化,赋初始值。

    2、push_back的使用 1)直接声明vector,并调用push_back

    vector<int> vec; for(int i=0;i<3;i++) vec.push_back(i); for(int i=0;i<vec.size();i++) cout<<vec[i];

    结果为0,1,2 对于少量数据的存储可以直接用这种方式 2)reserve预分配存储区大小后,用push_back,结果等同于1) 3)resize改变有效空间后,用push_back

    vector<int> vec; vec.resize(3); //改变vec有效空间,此时vec中的有效元素有三个0,0,0 for(int i=0;i<3;i++) vec.push_back(i); for(int i=0;i<vec.size();i++) cout<<vec[i];

    结果为0,0,0, 0,1,2 push_back是在vec有效元素后添加新元素,最后的总空间为(resize的空间+push_back添加的空间) 4)声明vector时给定空间大小size,结果等同于3)resize

    vector<int> vec(3); //此时vec中的有效元素有三个0,0,0 for(int i=0;i<3;i++) vec.push_back(i); for(int i=0;i<vec.size();i++) cout<<vec[i];

    结果为0,0,0, 0,1,2

    Processed: 0.060, SQL: 9