码迷,mamicode.com
首页 > 编程语言 > 详细

c++学习笔记(六)- vector使用和内存分配

时间:2017-12-16 13:18:20      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:建议   www.   es2017   改变   留空   9.png   span   c++   pre   

1. 定义

vector 是C++容器种特别常用的一种,用法:vector<int> a;c++11里定义了6种构造函数。

    int aNum[10] = { 1, 3, 5, 6, 9, 11, 13, 15, 17, 19 };    
    vector<int> myVector(2,1);        //定义一个2个元素的vector,并初始化为1
    for (auto it = myVector.begin(); it != myVector.end(); it++)
        cout << *it <<  ;
    cout << endl;
    //用数组aNum的值初始化vector
    vector<int> myNum(aNum, aNum + sizeof(aNum) / sizeof(int));
    for (auto it = myNum.begin(); it != myNum.end(); it++)
        cout << *it <<  ;
    cout << endl;
    //截取myNum的后半部分
    int medium = myNum.size() / 2;
    vector<int> new_nums((myNum.begin() + medium), myNum.end());
    for (auto it = new_nums.begin(); it != new_nums.end(); it++)
        cout << *it <<  ;
    cout << endl;

输出:

技术分享图片

 

2. insert

根据 c++ STL中的vector在内存中的分配与释放,vector内容和数组一样,是连续分配内存空间的,不同的是,在给vector分配内存时,会比实际需要的多一些,预留出以后插入的空间。

根据 c++ reference, 对vector.insert的描述,当向vector的末尾(vector.end())插入时,直接插入就好了,除非预留空间不够,才会重新分配内存。

如果向vector中间的某个位置插入,那么,由于vector的底层实现还是数组,插入点以后的所有节点都需要重新分配内存。

这样操作效率很低,所以如果需要向序列中间插入元素,c++ reference建议使用链表。

技术分享图片

3. size

myVector.size()返回vector里有多少个有效的元素,不是vector实际占用的存储空间。

myVector.resize(n,val)改变的是vector包含有效元素的个数,如果n<ori,直接扔掉多的那些;n>ori,末尾增加n-ori个新元素,根据val值初始化。如果n超过了capacity,要重新分配内存。

myVector.capacity返回给vector分配的存储空间。

技术分享图片

 

c++学习笔记(六)- vector使用和内存分配

标签:建议   www.   es2017   改变   留空   9.png   span   c++   pre   

原文地址:http://www.cnblogs.com/zhengmeisong/p/8046019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!