vector详解

vector介绍

vector是STL中序列容器的其中一种,也是实际运用时最常用到的容器之一,与C++内建的array非常相似。两者的唯一差别就是对于内存空间的分配上。array是静态空间分配方式,而vector是动态空间分配方式(动态分配在第三点会详细讲),运用比较灵活。vector维护的是一个连续线性空间.(详细请查看C++ vector)。那在实际编程中怎么运用vector呢。

vector运用

下面用标记号**标识的是重要注意的

    #include <iostream>
    #include <vector>
    vector<int> vecNum{1,6}; //声明并初始化
    vecNum.push_back(4); //从后面插入 {1,6,4}
    vecNmu.insert(vecNum.begin(), 5); //从前面插入 {5,1,6,4}

    auto size = vecNum.size(); // size=4
    auto num = vecNum.at(2); //num = 6

    //**resize**指的是强制容器空间为指定的大小,如果没有填充元素,默认为0
    vecNum.resize(50); 
    size = vecNum.size(); // size=50

    //**reserve**指的是分配不小于指定大小的空间,对元素个数不影响
    vecNum.reserve(120);    
    size = vecNum.size();// size=50
    auto capLen = vecNum.capacity(); //capLen = 120

    //**clear**只会清除值,并没有清除内存,释放空间。
    vector<int> tmpVec{1,5};
    cout << tmpVect.empty() << endl; //输出false
    cout << a.size() << endl; //输出2 
    cout << a.capacity() << endl; //输出2 

    tmpVect.clear();
    cout << tmpVect.empty() << endl; //输出true
    cout << a.size() << endl; //输出0 
    cout << a.capacity() << endl; //输出2 ****(注意)****

    //**erase**这个方式使用容易疏忽出错
    auto it = vecNum.begin();
    for(; it != vecNum.end(); ) {
        if(*it == 6) {
            it = vecNum.erase(it);//****(注意)****
        }
        it++;
    }

    //**emplace_back**通过右值引用构造对象,不需要拷贝或者移动内存,相比push_back能更好地避免内存的拷贝与移动,使容器插入元素的性能得到进一步提升。
    class A {  
         int x;  
         double y;  
         A(int a, double b):x(a),y(b){}  
    };  

    vector<A> v;  
    v.emplace_back(1, 2);  
    cout<<v.size()<<endl;  

vector分配空间的机制

“所谓动态增加大小,并不是在原空间之后接续新空间(因为无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间。因此,对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了。这是程序员易犯的一个错误,务需小心。”–摘自《STL源码解剖》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值