标准模板库STL-容器

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

STL

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

容器

可容纳各种数据类型的通用数据结构,是类模板
标准模板库STL-容器_第1张图片

顺序容器

  • 顺序容器中元素插入位置与元素的值无关
  • vector会提前多分配一些空间以备用
  • 适用于vector的操作都适用于deque
  • 在两端增删元素deque(双向队列)性能较好
  • list链表,不支持随机存取
  • list不支持 STL 的sort(),自己有相应的成员函数
  • 定义类型不确定的迭代器,前面加typename
    typename list::iterator i;

关联容器

  • 元素是排序的,元素位置和其值相关
  • 便于查找元素
  • 通常以平衡二叉树的方式实现
  • pair模板
  • Pred类型的变量定义了“一个比另一个小”的方法,缺省为less
  • less 模板的定义
    标准模板库STL-容器_第2张图片

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

  • set即集合,无相同的元素
  • map存放的元素有且仅有两个成员变量,一个名为first,另一个名为second
  • map根据first的值对元素排序,first的值不可重复,根据first来检索元素
  • map[]这个成员函数,multimap没有

相关的成员函数

  • 顺序容器和关联容器中都有的
    标准模板库STL-容器_第3张图片

  • 顺序容器的常用成员函数
    标准模板库STL-容器_第4张图片

  • 关联容器的常用成员函数
    标准模板库STL-容器_第5张图片

容器适配器

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

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

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

    template <class T, class Container = vector, class Compare = less >
    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;
  • 不同容器上的迭代器
    标准模板库STL-容器_第6张图片

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

算法

容器上的操作的函数模板

  • 通过迭代器操纵元素

  • “相等”的概念
    标准模板库STL-容器_第7张图片

  • find() 举例
    标准模板库STL-容器_第8张图片

  • 大多重载的算法有两个版本
    标准模板库STL-容器_第9张图片

你可能感兴趣的:(C++小记,stl,容器,c++)