C++知识点(十)泛型程序设计与C++STL标准模板库

1.泛型程序设计

把代码从特定的数据结构中分离出来,使得它不依赖于特定的数据结构而更加通用

容器->迭代器->算法

适配器

2.概念:用于界定具备一定功能的数据类型

comparable:可比较

Assignable:可赋值

Sortable:可比较且可赋值

3.模型:符合一个概念的数据类型就是该概念的模型

e.g. int 为comparable概念的模型

4.用概念做模板参数名

5.STL:standard template library  容器、迭代器、函数对象、算法

容器<->迭代器(作为算法的参数)->算法   ->函数对象(作为算法的参数)

  • 容器:头文件<vector>
    •     顺序
    •     有序关联
    •     无序关联
  • 容器适配器:栈stack 队列queue 优先队列priority_queue
  • 迭代器:泛型指针,包含头文件<iterator>
    • ++,*,->,--
  • 函数对象:泛化的函数 ,头文件<functional>
  • 算法:头文件<algorithm>

transform

6.迭代器:泛型指针

输入流迭代器 istream_iterator <T> (cin)       *(p++)

输出流迭代器 ostream_iterator <T> (cout,“输出间隔”)       *(p++)=x

前向迭代器:输入&输出迭代器,且可单向遍历

双向迭代器:输入&输出迭代器,且可双向遍历

随机访问迭代器:双向迭代器,且可在任意两个位置跳转

两个迭代器表示一个区间[p1,p2)

迭代器的辅助函数:advance(p,n);distance(first,last)

7.容器基本功能和分类

迭代器访问方式分类:可逆容器,随机访问容器

容器数据组织方式分类:顺序容器、关联容器(有序、无序)

容器通用功能:

  • 默认构造函数构造空容器
  • 关系运算
  • begin(),end()
  • clear()
  • empty()
  • size()
  • s1.swap(s2)

  相关数据类型:S::iterator,S::const_iterator

对可逆容器的访问:rbegin(),rend()

  相关数据类型:S::reverse_iterator,S::reverse_const_iterator

8.顺序容器:(长度可扩展的数组)

vector ,queue, list, forward_list(特殊的添加删除操作), array(大小固定)

  线性排列,随时插入删除元素,可赋值(assignable)

接口(不包括array和foward_list):

  • 构造函数
  • 赋值函数assign
  • 插入函数insert、push_front(list deque)、push_back、emplace、emplace_front
  • 删除函数erase、clear、pop_front(list deque)、pop_back、emplace_back
  • 首尾元素的直接访问front、back
  • 改变大小resize

9.顺序容器

  • vector 随机访问快,插入删除慢
    • 向量的容量:s.capacity()  ;s。reserve(n) 使容量至少为n, 不够则扩展
  • deque:两端插入删除快,中间插入删除慢,随机访问较快,比vector慢
  • list:插入删除快,不能随机访问,能拼接操作
  • forward_list: 
  • array: 大小固定

顺序容器的比较

  • 大量随机访问:vector
  • 少量随机访问,两端插入: deque
  • 不需随机访问,需插入删除:list
  • 数组:array

顺序容器的插入迭代器

  • 前插迭代器
  • 后插迭代器
  • 任意位置插迭代器

顺序容器的适配器:以顺序容器为基础构建一些常用的数据结构,对顺序容器进行封装

  • 栈stack:先进后出 ;任意一种顺序容器为基础
  • 队列queue:先进先出;以前插顺序容器list deque为基础
  • 优先级队列priority_queue:最大的元素先出

栈和队列共同支持操作:

  • s1 operator s2; size() ;empty() ;pop() ;push();

栈支持的操作:top()

队列支持的操作:front();back();

10.关联容器

特点:每个关联容器都有一个key,可高效查找元素

接口:插入insert、删除erase、查找find、定界low_bound upper_bound equal_range、计数count

单重关联容器:map、set 键值唯一,一个键值对应一个元素

多重关联容器:multiset、multimap 键值不唯一,一个键值对应一个元素

简单关联容器:set、multiset 只有一个类型参数键,容器元素就是键本身

二元关联容器:map、multimap 有两个类型参数,分别表示键和元素类型

无序关联容器:unordered_set、unordered_map、unordered_multiset、unordered_multimap

哈希函数和键类型的==运算符来组织元素

11.集合set:存储一组无重复的元素,有序,数据类型为键本身

12.映射map:数据类型为键和附加数据构成的二元组(key,value)

13.多重集合和多重映射:去掉了键为一的限制

14.函数对象

15.函数适配器

16.算法

猜你喜欢

转载自www.cnblogs.com/lemon333333/p/10246907.html
今日推荐