STL标准库(三)序列容器之deque

该容器以一个具体的程序进行演示讲解

#include<deque> 需要包含该头文件

template <typename T>

void print(T Begin, T end) 自行定义一个遍历打印的模板函数后续判断迭代器是否可以利用

{

    for (T i = Begin; i != end; ++i)

    {

        std::cout << *i << std::endl;

    }

    std::cout << std::endl;

}

int main()

{

    std::deque<int> obja(5); 声明一个int类型五个元素初始化为0的队列,内存不连续,obja为迭代器

    若std::deque<int> obja(5,12138); 声明一个int类型五个元素为12138队列

    for (size_t i = 0; i < obja.size(); i++) 初始化队列

    {

       obja[i] = i; 因为其具有迭代器,可以直接以数组方式进行赋值

    }

    std::cout << obja.size() << std::endl; 输出队列大小

    std::deque<int> objb(obja); 拷贝构造

    std::cout << objb.size() << std::endl;

    objb[3] = 15; 下标3元素赋值3

    objb.at(0) = 0; 下标0元素赋值0

队列容器的迭代器是随机访问迭代器,此下研究该迭代器

该迭代器具有以下操作符功能++ -- += -=  = - * []

    std::cout << typeid(std::deque<int> (int类型deque容器)::iterator (迭代器)::iterator_category (迭代器类型)).name() << std::endl;

查看迭代器类型,是随机访问迭代器,

    auto objc = objb.begin(); begin()返回值本质上就是一个迭代器

    std::cout << typeid(objc).name() << std::endl;

查看发现objc类型为一个迭代器,类型如下:

class std::_Deque_iterator<classstd::_Deque_val<structstd::_Deque_simple_types<int> > >

std::cout << *objc << std::endl; 取该objc值打印为0,说明objc是迭代器

auto it = obja.begin(); 设置一个变量用于遍历该容器

    for (size_t i = 0; i < obja.size(); i++) 遍历打印

    {

        std::cout << *it++ << std::endl; 打印0 1 2 3 4 5

    }

    for(auto i = obja.begin(); i != obja.end(); i++) 效果同上一致

    {

        std::cout << *i << std::endl;

    }

    for(auto i = obja.rbegin(); i != obja.rend(); i++) 反向迭代器应用

    {

        std::cout << *i << std::endl;

    }

    obja.push_back(5); 尾部插入5

    obja.push_front(6); 头部插入6

    obja.insert(obja.begin() + 3, 222); 第四个位置插入22,即任意位置插入

    obja.pop_back();尾部元素弹出

    obja.pop_front(); 头部元素弹出

    obja.erase(obja.end() - 1); 任意位置弹出

    obja.clear(); 队列元素清空

    crbegin r反向迭代器 c是const 组合是常量反向迭代器,crbegin意思是对rbegin做了一个const的修饰

    std::cout << obja.size() << std::endl;打印该容器长度也可判断该容器是否为空

    print(obja.begin(), obja.end()); 可以利用之前定义模板函数遍历打印

    system("pause");

    return 0;

}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值