c++ vector简单使用

本文详细介绍了C++STL中的vector容器,包括其底层数据结构(数组),支持的快速随机访问以及常用的增删查改操作。同时涵盖了迭代器的使用,如普通迭代器、常量迭代器和反向迭代器。文中还提到ACM/ICPC竞赛中vector的应用实例。
摘要由CSDN通过智能技术生成

        底层数据结构为数组 ,支持快速随机访问


1、构造函数

vector<int> s;      
//  定义一个空的vector对象,存储的是int类型的元素
vector<int> s(n);   
//  定义一个含有n个int元素的vector对象
vector<int> s(first, last); 
//  定义一个vector对象,并从由迭代器first和last定义的序列[first, last)中复制初值

2、常用操作



//增
s.push_back(x)      //  向表尾插入元素x
s.insert(it, val)   //  向迭代器it指向的元素前插入新元素val
s.insert(it, n, val)//  向迭代器it指向的元素前插入n个新元素val
s.insert(it, first, last)   
//  将由迭代器first和last所指定的序列[first, last)插入到迭代器it指向的元素前面

//删
s.pop_back()        //  删除表尾元素
s.erase(it)         //  删除由迭代器it所指向的元素
s.erase(first, last)//  删除由迭代器first和last所指定的序列[first, last)
s.clear()           //  删除容器中的所有元素

//查
s[i]                //  直接以下标方式访问容器中的元素
s.front()           //  返回首元素
s.back()            //  返回尾元素
s.size()            //  返回表长
s.empty()           //  表为空时,返回真,否则返回假
s.begin()           //  返回指向首元素的随机存取迭代器
s.end()             //  返回指向尾元素的下一个位置的随机存取迭代器


//改
s.reserve(n)        //  预分配缓冲空间,使存储空间至少可容纳n个元素
s.resize(n)         //  改变序列长度,超出的元素将会全部被删除,如果序列需要扩展(原空间小于n),元素默认值将填满扩展出的空间
s.resize(n, val)    //  改变序列长度,超出的元素将会全部被删除,如果序列需要扩展(原空间小于n),val将填满扩展出的空间
s.assign(first, last)
//  将序列替换成由迭代器first和last所指定的序列[first, last),[first, last)不能是原序列中的一部分
s.swap(v)           //  将s与另一个vector对象进行交换


//  要注意的是,resize操作和clear操作都是对表的有效元素进行的操作,但并不一定会改变缓冲空间的大小
//  另外,vector还有其他的一些操作,如反转、取反等,不再一一列举
//  vector上还定义了序列之间的比较操作运算符(>、<、>=、<=、==、!=),可以按照字典序比较两个序列。
//  还是来看一些示例代码吧……

/*
 * 输入个数不定的一组整数,再将这组整数按倒序输出
 */

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> L;
    int x;
    while(cin >> x)
    {
        L.push_back(x);
    }
    for (int i = L.size() - 1; i >= 0; i--)
    {
        cout << L[i] << " ";
    }
    cout << endl;
    return 0;
}

3、迭代器  

类型(以int举例):vector<int>::iterator(普通);

                                vector<int>::const_iterator(常量迭代器);

                                vector<int>::reverse_iterator(反向迭代器);

        通常用begin(),end()赋值:begin()返回第一个元素的迭代器,end()返回最末元素的下一块空间的迭代器;也可用rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素rend() 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置。

#include<iostream>
#include<vector>

using namespace std;

int main()
{
    vector<int> nums(5,1);
    
    int i=1;
    //普通迭代器
    for(vector<int>::iterator iter=nums.begin();iter!=nums.end();iter++;){
        *iter=i++;
    }

    //常量迭代器,不能更改指向的值
    for(vector<int>::const_iterator iter=nums.begin();iter!=nums.end();iter++;){
        cout<<*iter<<endl;
    }
    
    //反向迭代器
    for (vector<int>::reverse_iterator iter = nums.rbegin();; iter != nums.rend(); iter ++)
    {
	    cout << *iter << endl;
    }

    return 0;
}

4、参考 

        ACM/ICPC竞赛之STL--vector_acm竞赛中可以使用vector-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值