zoukankan      html  css  js  c++  java
  • 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.算法

  • 相关阅读:
    mysql免安装
    记一次电脑DNS被劫持
    小程序中page声明周期onShow
    微信公众号调试
    wx.navigateTo()
    mongodb 数据库安装
    小程序中使用坐标获得地区名称
    小程序 <include >
    记一点typescript whitespace rule
    小程序<template>的使用
  • 原文地址:https://www.cnblogs.com/lemon333333/p/10246907.html
Copyright © 2011-2022 走看看