STL标准模板库学习-------deque,list

STL标准模板库学习

deque容器

  1. deque容器简介
  • deque时双端数组,而vector是单端数组;
  • deque在接口上和vector非常相似,在许多操作的地方可以直接替换;
  • deque可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法);
  • deque在头部和尾部插入删除元素的速度非常快(时间复杂度为O(1) ),但是在中间的执行效率慢(时间复杂度为O(n));
  • #include <deque>
  1. deque容器的操作
  • deque容器的操作和vector基本一致:
    • deque.push_front(elem); //在头部插入元素
    • deque.pop_front(); //删除头部第一个元素

list容器(链表)

  1. list容器简介
  • list是一个双向链表容器,可高效地进行插入和删除操作;
  • list不可以随机存取元素,所以不支持at()和[]下标索引操作;
  • 插入和删除的时间复杂度为O(1),但是查找的时间复杂度为O(1);
  • #include <list>
  1. list对象的默认构造和带参数的构造函数
  • 采用模板类实现,对象的默认构造形式:list<T> lst;:
list<int> lstInt;
list<float> lstF;
  • 带参数的构造函数和vector容器基本一致。
  1. list头部尾部插入删除元素
    因为list容器和deque容器一样是双端容器,因此在头部尾部插入删除元素的函数调用一致。
  • lst.front();返回双端链表的第一个结点;
  • lst.back();返回双端链表的最后一个结点;
  • 不仅可以返回第一个结点和最后一个结点的值,还可以返回对象,并进行赋值;
    int front = lstInt.front();
    int back = lstInt.back();
    cout<<"front:"<<front<<" "<<"back:"<<back<<endl;

    lstInt.front() = 1111;
    lstInt.back() = 999;
    cout<<"front:"<<lstInt.front()<<" "<<"back:"<<lstInt.back()<<endl;
  1. list容器的迭代器
  • list容器的迭代器是一个“双向迭代器”:双向迭代器从两个方向读写容器。除了提供前向迭代器的全部操作外,还提供前置和后置的自减运算。
  • list.begin();返回正向的第一个结点的迭代器;
  • list.end();返回正向最后一个结点的后一个位置的迭代器;
  • list.rbegin();返回反向即倒数第一个结点的迭代器;
  • list.rend();返回反向倒数最后一个结点的后一个位置的迭代器;
  • list容器的迭代器没有重载’+'运算符,不能执行+n操作,只能执行++--操作;
  1. list的赋值
    理论知识:

    • list.assign(beg, end);:将beg到end区间的数据拷贝到vector(左闭右开)。
    • list.assign(n,elem);:将n个elem拷贝赋值给本身。
    • list& operator=(const vector &vec);:重载等号操作符。
    • list.swap(vec);:将vec与本身的元素互换。
  2. list的大小
    理论知识:

    • list.size();:返回容器中元素的个数。
    • list.empty();:判断容器内是否为空,返回值为布尔类型
    • list.resize(num);:重新指定大小,若容器变大,则以默认值(0)填充新位置,若变小,则删除多余元素。
    • list.resize(num,elem);:重新指定容器的长度为num,以elem填充新位置。
  3. list的插入

  • list.insert(pos, elem);在pos位置插入一个elem元素的拷贝,返回新的数据的位置;(pos为迭代器)
  • list.insert(pos, n, elem);在pos位置插入n个elem元素,无返回值;
  • list.insert(pos, beg, end);在pos位置插入[beg, end)区间的数据,无返回值;
    由于list是双向链表,不是连续存储,因此在插入结点后不会导致迭代器失效。
  1. list的删除
  • list.clear();移除容器的所有数据;
  • list.erase(beg, end);删除[beg, end)区间的数据,返回下一个数据的位置;
  • list.erase(pos);删除pos位置的数据,返回下一个数据的位置;
  • list.remove(elem);删除容器中所有与elem值匹配的元素。
  1. list反序排列
    list.reverse();反转链表,比如lst包含1,3,5元素,反转后,lst包含5,3,1.
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值