STL源码剖析笔记(vector)

5 篇文章 0 订阅
4 篇文章 0 订阅

vector内部是在初始化的时候申请一段连续内存空间,需要加入元素时,若当前已经申请的空间足够新元素使用,则直接将新元素放在内存中,若不够用的话,就在动态申请新的一块内存,新内存大小为:min(当前已申请的内存*2,当前已申请的内存+新元素所占内存),然后将原来的数据从旧内存复制到新内存中去,释放旧内存空间,将新加入的元素放入新内存中,初学者可通过vector.size()和vector.capacity()来验证

int main()
{
    vector<int> ve;
    for(int i=0;i<10;i++){
        cout<<"size() = "<<ve.size()<<endl;
        cout<<"capacity() = "<<ve.capacity()<<endl;
        ve.push_back(i);
    }
    return 0;
}

output:
size() = 0
capacity() = 0
size() = 1
capacity() = 1
size() = 2
capacity() = 2
size() = 3
capacity() = 4
size() = 4
capacity() = 4
size() = 5
capacity() = 8
size() = 6
capacity() = 8
size() = 7
capacity() = 8
size() = 8
capacity() = 8
size() = 9
capacity() = 16

 

因此,平常使用vector的时候,如果已经知道了vector要存储的最小元素数量x,则可直接创建x个元素,以节省耗时,以下举例说明:

 

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <deque>
#include <vector>
#include <ctime>
#include <windows.h>
 
using namespace std;
typedef long long ll;
const int maxn = 1e7+7;
const int mod = 1e9+7;

void func1()
{
    double now1 = GetTickCount();//获取当前时间
    vector<int> ve;
    for(int i=0;i<maxn;i++){
        ve.push_back(i);
    }
    double now2 = GetTickCount();
    cout<<now2-now1<<endl;//输出时间差
}
void func2()
{
    double now1 = GetTickCount();
    vector<int> ve(maxn,0);
    for(int i=0;i<maxn;i++){
        ve[i]=i;
    }
    double now2 = GetTickCount();
    cout<<now2-now1<<endl;
}

int main ()
{
    func1();

    func2();

    return 0;
}
//output
//297
//78

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值