【C++】vector的使用方法

声明:文章中编程环境均为VS2013编译器

vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。首先我们来看一下vector的接口:
这里写图片描述
1、使用vector需要添加头文件#include<vector>
2、vector的初始化:

vector<int> v;   //定义一个存放整形的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),未给定大小,默认大小为0
vector<int> v(5); //定义了5个整型元素的向量,但没有给出初值,其值是不确定的。
vector<int> v(5,1); //定义了5个整型元素的向量,且给出每个元素的初值为1

3、简单的vector接口的使用
v.begin( ):返回迭代器的起始位置
v.end( ):返回迭代器最后一个元素下一个位置
v.size( ):返回其大小
从向量中读取元素
1、通过下标方式读取

void printf_vector()
{
    for(size_t = 0;i<v.size();i++)
    {
       cout<<v[i]<<" ";
    }
    cout<<endl;
}

2、通过遍历器方式读取

void print_vector(const vector<T>& v)
{
    vector<int>:: const_iterator it = v.begin();
    while(it != v.end())
    {
       cout<<*it<<" ";
       it++;
    }
    cout<<endl;
}

v.push_back(1); //在v的最后一个容器后插入一个元素,其值为1
v.pop_back(); //删除v容器的最后一个元素

void test_vector()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    print_vector(v);
    v.pop_back();
    print_vector(v);
}

运行结果:
这里写图片描述
a.size():返回v中元素的个数
v.capacity( ):返回v最多能存储的容量大小
v.rezize(5); //将v的现有元素个数改为5个,如果改变后的大小大于原来的大小,则补上,并且补上的值为0(在vs2013编译器下),如果改变后的大小小于原来的大小,则删掉多余的

void test_vector()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    print_vector(v);
    v.resize(5);
    cout<<"capacity:"<<v.capacity()<<endl;
    cout << "size:" << v.size() << endl;
    print_vector(v);
}

这里写图片描述
这里写图片描述

void test_vector()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    print_vector(v);
    v.resize(3);
    print_vector(v);
}

这里写图片描述
v.rezize(5,2); //将v的现有元素个数改为5个,如果改变后的大小大于原来的大小,则补上,并且补上的值为10,如果改变后的大小小于原来的大小,则删掉多余的

void test_vector()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    print_vector(v);
    v.resize(5,10);
    print_vector(v);
}

运行结果:
这里写图片描述
v.reserve(10):改变v容器的容量大小为10。只开辟,不初始化。

void test_vector()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    print_vector(v);
    v.resize(5);
    v.reserve(10);
    print_vector(v);
}

这里写图片描述
v.insert(v.begin()+1,10):在v的第1个元素(从第0个算起)的位置插入数值10
v.insert(v.begin()+1,5,10); //在v的第1个元素(从第0个算起)的位置插入5个数,其值都为10

vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    print_vector(v);
    v.insert(v.begin() + 1,10);
    print_vector(v);
    v.insert(v.begin() + 1, 5, 10);
    print_vector(v);
}

运行结果这里写图片描述
v.insert(v.begin()+1,b+2,b+5); //b为数组,在v的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元su

vector<int> v;
    int b[] = { 1, 2, 3, 4, 5, 6, 7 };
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    print_vector(v);
    v.insert(v.begin() + 1, b + 2, b + 5);
    print_vector(v);

这里写图片描述
v.erase(v.begin()+1,v.begin()+3):删除v中第1个(从第0个算起)到第2个元素,也就是说删除的元素从v.begin()+1算起(包括它)一直到v.begin()+ 3(不包括它)

vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    print_vector(v);
    v.erase(v.begin() + 1, v.begin() + 3);
    print_vector(v);

这里写图片描述
v.back(); //返回v的最后一个元素
v.front(); //返回v的第一个元素

void test_vector()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    print_vector(v);
    v.reserve(10);
    cout << v.front() << endl;
    cout << v.back() << endl;
}

这里写图片描述
v.clear():清空v中的元素
v.empty():判断v是否为空,空则返回ture,不空则返回false
v.swap(b):b为容器,将v中的元素和b中的元素进行整体性交换

void test_vector()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    vector<int> v1;
    v1.push_back(6);
    v1.push_back(7);
    v1.push_back(8);
    print_vector(v);
    print_vector(v1);
    v.swap(v1);
    print_vector(v);
    print_vector(v1);

这里写图片描述
v[i]:返回v的第i个元素,当且仅当v[i]存在

vector<int> v;
    for (int i = 0; i < 10; i++)
    {
        v[i] = i;//这种做法以及类似的做法都是错误的。下标只能用于获取已存在的元素,而现在的a[i]还是空的对象,运行会报错
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值