标准模板库STL-容器

程序设计与算法(三)C++面向对象程序设计
郭炜

STL

  • 标准模板库 STL,常用的数据结构和算法的模板的集合
  • 泛型程序设计
  • 被插入容器中的元素是原对象的一个复制

容器

可容纳各种数据类型的通用数据结构,是类模板
容器

顺序容器
  • 顺序容器中元素插入位置与元素的值无关
  • vector会提前多分配一些空间以备用
  • 适用于vector的操作都适用于deque
  • 在两端增删元素deque(双向队列)性能较好
  • list链表,不支持随机存取
  • list不支持 STL 的sort(),自己有相应的成员函数
  • 定义类型不确定的迭代器,前面加typename
    typename list<T>::iterator i;
关联容器
  • 元素是排序的,元素位置和其值相关
  • 便于查找元素
  • 通常以平衡二叉树的方式实现
  • pair模板
  • Pred类型的变量定义了“一个比另一个小”的方法,缺省为less<Key>
  • less 模板的定义
    less

  • 自己定义的类需要给出比较大小的方式
    friend bool operator < (const A& a1, const A& a2) {return a1.n < a2.n;}

  • set即集合,无相同的元素
  • map存放的元素有且仅有两个成员变量,一个名为first,另一个名为second
  • map根据first的值对元素排序,first的值不可重复,根据first来检索元素
  • map[]这个成员函数,multimap没有
相关的成员函数
  • 顺序容器和关联容器中都有的
    这里写图片描述

  • 顺序容器的常用成员函数
    这里写图片描述

  • 关联容器的常用成员函数
    这里写图片描述

容器适配器
  • stack栈,先进后出;可用vector、list、deque实现,缺省情况用deque实现

    template<class T, class Cont = deque<T> >
    class stack {
      ....
    };
  • queue队列(单向),先进先出;可用list、deque实现,缺省情况用deque实现

  • priority_queue优先级队列,最高优先级的元素总是第一个出队;通常采用堆排序

    template <class T, class Container = vector<T>, class Compare = less<T> >
    class priority_queue {
    ....  
    };
  • 都有empty()size()函数,用于元素个数的判断

迭代器

用于存取容器中的元素,类似于指针

  • vector<int>::iterator i;
    for (i = v.begin(); i != v.end(); i++)
    cout << *i << endl;
    
    vector<int>::reverse_iterator r;//反向迭代器
    for (r = v.rbegin(); r != v.rend(); r++)
    cout << *r << endl;
  • 不同容器上的迭代器
    迭代器

  • 有的算法如sort()需要随机访问迭代器来访问元素,有的容器不支持这些算法

算法

容器上的操作的函数模板

  • 通过迭代器操纵元素

  • “相等”的概念
    判断相等的方式

  • find() 举例
    find()

  • 大多重载的算法有两个版本
    自己判断大小

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值