vector容器类简单示例

vector作为STL提供的标准容器之一,是经常要使用的,有很重要的地位,并且使用起来也是灰常方便。vector又被称为向量,vector可以形象的描述为长度可以动态改变的数组,功能和数组较为相似。实际上更专业的描述为:vector是一个多功能的,能够操作多种数据结构和算法的模板类和函数库,vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
那么vector和数组的主要区别
数组:分配的是静态空间,一般分配了就不可以改变,就像我们熟知的定义了一个数组,那么数组的长度就不可以改变了,我们也不可以进行越界访问,但是编译器不检查越界,这一点在我们编程的时候要尤为注意(很多都可能会烦这样的错误!!)。一般申请的数组长度不能满足我们的要求了,我们要重新申请大一点数组,然后把原数组中数据复制过来。
vector:分配的是动态空间,即:我们发现在声明vector容器的时候也可以不指定容器的大小,vector是随着元素的加入,空间自动扩展的。但是,我们必须要负责任的肯定vector分配的空间是连续的,也就是支持数组中的下标随机访问,实际上vector的实现机制是:预留一部分空间,而且预留空间的大小是按一定比率增长的,如果空间不够用的话,要保证连续,就必须重新new一片空间,然后将原有元素移动到新空间,同时预留新的空间(并且新分配的空间比原来分配的空间),最后将原来的那部分空间释放掉。这样预留空间的好处就是不用每次向vector中加元素都重新分配空间。

#include <iostream>
#include<vector>
using namespace std;
int main()
{
    int a[] = {2,3,4};
    vector<int> v1;
    vector<int>::iterator iter;
    //插入元素
    v1.insert(v1.begin(),2,1);//从下标为0开始插入两个1,结果为 1 1
    v1.insert(v1.begin(), a, a + 3);//从下标为0开始插入从a[0]到a[3]前面的元素,即插入a[0],a[1],a[2],结果为2 3 4 1 1
    cout << "容量为:" << v1.capacity() << endl;
    cout << "长度为:" << v1.size() << endl;
    v1.insert(v1.begin()+5,2,5);//从下标为5开始插入两个5,结果为2 3 4 1 1 5 5
    v1.push_back(0);//尾插
    cout << "data: ";
    for (iter = v1.begin(); iter != v1.end(); ++iter)
        cout << *iter << " ";
    cout << endl <<"容量为:"<<v1.capacity()<< endl;//2 3 4 1 1 5 5 0
    cout << "长度为:" << v1.size() << endl;
    //删除元素
    v1.erase(v1.begin(),v1.begin()+2);//删去下标为0,1的,也就是删去2,3.剩下为4 1 1 5 5 0
    v1.erase(v1.begin()+1);//删去下标为1的,也就是删去1,剩下为4 1 5 5 0
    v1.pop_back();//尾删 结果为4 1 5 5
    cout << "data: ";
    for (iter = v1.begin(); iter != v1.end(); ++iter)
        cout << *iter << " ";
    cout << endl << "容量为:" << v1.capacity() << endl;
    cout << "长度为:" << v1.size() << endl;
    v1.clear();//清空数据
    cout <<"v1.clear()后" << endl;
    cout <<"容量为:" << v1.capacity() << endl;
    cout <<"长度为:"<< v1.size()<<endl;
    v1.~vector<int>();//释放内存
    cout << "v1.~vector<int>()后" << endl;
    cout << "容量为:" << v1.capacity() << endl;
    cout << "长度为:" << v1.size() << endl;
    if (v1.empty())//判断vector是否为空
        cout << "vector为空";
    return 0;
}

下面为结果
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值