vector学习之reserver和resize操作

reserve预留存储空间,操作vector之前如果设置这个存储空间在插入数据时就节省了每次分配空间的时间resize改变容器可存储元素的个数。

#include <iostream>
#include <vector>
#include <time.h>

using namespace std;

typedef struct Personal2
{
    int m_age;
    int m_height;
    string m_name;

    ~Personal2()
    {
        //cout << "destructor~~~Personal=========age~" << m_age << endl;
    }

}Person2;

//resize, reserve对比使用测试
void resize_reserve_Test()
{
    int count = 33;//214748
    int nsize = 55;
    string name = string("床前明月光,疑似地上霜,举头望明月,低头思故乡。");
    vector<Person2> vec1;
    Person2 person;
    person.m_name = string("床前明月光,疑似地上霜,举头望明月,低头思故乡。");
    cout << "resize_reserve_Test==========" <<endl;
    for(int i = 0; i < count; i++)//214748
    {
        person.m_age = i;
        person.m_height = i;
        vec1.push_back(person);
    }

    cout << "vec1.size=" << vec1.size() << " vec1.capacity=" << vec1.capacity() << endl;
    cout << "start vec1.empty()====" << vec1.empty() << endl;
    vec1.clear();
    cout << "end   vec1.empty()====" << vec1.empty() << endl;
    cout << endl;

    vec1.reserve(count);
    for(int i = 0; i < count; i++)
    {
        person.m_age = i;
        person.m_height = i;
        vec1.emplace_back(person);
    }
    cout << "vec2.size=" << vec1.size() << " vec2.capacity=" << vec1.capacity() << endl;
    vec1.clear();
    cout << endl;

    vec1.reserve(nsize);//设置容量为nsize
    for(int i = 0; i < count; i++)
    {
        person.m_age = i;
        person.m_height = i;
        vec1.emplace_back(person);
    }
    cout << "vec3.size=" << vec1.size() << " vec3.capacity=" << vec1.capacity() << endl;
    vec1.clear();
    cout << endl;

    for(int i = 0; i < count; i++)
    {
        person.m_age = i;
        person.m_height = i;
        vec1.emplace_back(person);
    }
    cout << "vec4.size=" << vec1.size() << " vec4.capacity=" << vec1.capacity() << endl;
    vec1.clear();
    cout << endl;

    vector<Person2> vec2;
    vec2.reserve(count);
    for(int i = 0; i < count; i++)
    {
        person.m_age = i;
        person.m_height = i;
        vec2.push_back(person);
    }
    cout << "vec5.size=" << vec2.size() << " vec5.capacity=" << vec2.capacity() << endl;
    vec2.clear();
    cout << endl;

    for(int i = 0; i < nsize; i++)
    {
        person.m_age = i;
        person.m_height = i;
        vec2.push_back(person);
    }
    cout << "vec6.size=" << vec2.size() << " vec6.capacity=" << vec2.capacity() << endl;
    vec2.clear();

    cout << endl;

    for(int i = 0; i < nsize; i++)
    {
        person.m_age = i;
        person.m_height = i;
        vec2.push_back(person);
    }
    vec2.resize(count);
    cout << "vec7.size=" << vec2.size() << " vec7.capacity=" << vec2.capacity() << endl;
    vec2.clear();
    cout << "vec8.size=" << vec2.size() << " vec8.capacity=" << vec2.capacity() << endl;
    cout << endl;
}


int main()
{
    //int = [-2147483648, 2147483647]

    resize_reserve_Test();
    cout << endl;

    cout << "Hello World!" << endl;
    return 0;
}

 

通过以上结果我们可知,reserve操作时,如果之前的vec已配了空间,这个时候再分配空间,这个值如果比之前的大,则会分配成功,如果分配的值比之前小,则vector的存储空间还是原来的大小。resize只是改变元素的个数,并不能改变存储空间的大小,

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值