P1 认识headers、版本、重要资源

C++标准库中有百分之八十左右都是由 STL组成的

一、C++Standard Library 标准库 vs Standard Template Library (STL)标准模板库

  1. C++标准库和STL的关系:
    C++标准库>STL,STL包含的是六大部件,C++标准库还包含其他一些东西
    C++标准库中有百分之八十左右都是由 STL组成的

  2. 标准库以head files形式存在
    (1)C++标准库的head files不带文件延申名(.h),例如#include<vector>
    (2))新式 C head files 不带副档名 .h,例如 #include <cstdio>
    (3)旧式C head files (带有副档名.h)仍然可用,例如#include<stidio.h>

二、常用网站:

cplusplus.com
cppreference.com
gcc.gnu.org

P2 STL 体系结构基础介绍

  • 程序 = 数据结构 + 算法

一、STL 六大部件(components)

部件名称 英文名 作用
容器 Containers 容器就是用来储存元素的,元素就需要占用内存,是用来解决内存的事情
分配器 Allocators 分配器是用来支持容器的,解决内存的事情
算法 Algorithms 具有某种功能的函数,算法可以独立出来,通过迭代器作用到多种容器
迭代器 Iterators 属于泛型指针,作为 算法和容器沟通的桥梁
适配器 Adapters 使 XX 看起来像是 XX, XX 可以是另外五种部件,都可以适当的转换
仿函数 Functors 其实,它的作用就相当于是一个函数
  1. 六大部件之间的关系:
  • 容器用来存储元素,实现是一种class
  • 分配器用来给容器分配内存大小
  • 迭代器用来实现容器中元素的访问,是算法和容器之间的桥梁
  • 算法可以独立出来,通过迭代器作用到多种容器
  • 适配器用做对象的包装,使之适应不同的接口实现
  • 仿函式是一种用来实现函数功能的class

在下图中,我们使用了:
1.一个容器vector
2.使用vector时,使用分配器allocator分配内存:vi是个数组(里面放着从ia头到ia尾的元素)
3.使用vi.begin(),vi.end()即迭代器,作为算法的参数,也就是让count_if去处理这些元素
4.使用count_if算法
5.使用仿函数less():小于40的元素有哪些?
6.使用函数适配器来对我们算法的结果进行进一步筛选(not1, bind2nd),not1变成找大于等于40的元素

二、容器区间

基本所有容器都有begin()和end()指针

  1. 如何定义一个iterator?
Contaniner<T>:: iterator ite=c.begin();
  1. 遍历容器:for/while
for(;ite!=c.end();++ite)

或者

while(ite!=c.end())
{++ite;
}
  1. 从C++11开始的新写法
  2. auto:类型自动推导
    如下:ite的类型其实是list<string> :: iterator。但是我们用auto来代替。

P3 容器分类与各种测试(一)—— P6 容器分类与各种测试(四)

一、序列式容器

序列式容器的特点是将数据放进容器之后,会按照用户放进去的顺序依次排列

序列式容器 特点
array 一段连续空间,当初定了多大那就是多大空间,前面与后面是无法扩充的,不论是否使用,都会全部占用
vector 尾部可进可出,当空间不够时会自动扩充
deque 双向都可扩充,两端都可进可出
list 一个双向环状链表,有向前和向后两个指针
forward_list 一个单向链表,仅有向后一个指针,占用的内存比list

二、关联式容器

关联式容器类似于key-value,非常适合于查找操作

关联式容器名 特点 实现 注释
set/multiset key和value是同一个,存储是有序的 红黑树 加上multi意味着可以加入重复键值对
map/multimap 每一个key对应一个value,存储是有序的 红黑树 加上multi意味着可以加入重复键值对
unordered_set/unordered_multiset 相对于set/multiset,存储是无序的 哈希表 加上multi意味着可以加入重复键值对
unordered_map/unordered_multimap 相对于map/multimap,存储是无序的 哈希表 加上multi意味着可以加入重复键值对

P7分配器之测试


allopcator主要成员函数:

  1. allocate: 尝试分配n个size_type类型的存储空间,然后返回第一个元素的起始地址(只是分配空间,不构造对象)
    函数原型:

pointer allocate(size_type n);

  1. deallocate: 释放先前allocate分配的且没有被释放的存储空间
    原型函数:

void deallocate(pointer p, size_t n);

p:指向以前使用allocator :: allocate分配的存储块的指针。 n:在调用allocator :: allocate时为这个存储块分配的元素数量。

C++ STL源码剖析——P1、P2、P3、P4、P5、P6、P7相关推荐

  1. 设系统中有三种类型的资源(A,B,C)的五个进程(P1,P2,P3,P4,P5)。A资源的数量为17,B资源的数量为5,C资源的数量为20。在T0时刻系统状态如表所示。

    银行算法应用 题目 设系统中有三种类型的资源(A,B,C)的五个进程(P1,P2,P3,P4,P5).A资源的数量为17,B资源的数量为5,C资源的数量为20.在T0时刻系统状态如表所示.系统采用银行 ...

  2. 【STL源码剖析】迭代器

    [STL源码剖析]迭代器 第3章 迭代器(iterators)与traits编程技法(<STL源码剖析> ) 3.1 迭代器设计思维--STL关键所在 3.2 迭代器(iterator)是 ...

  3. STL源码剖析---移动advance

    目录 一. 迭代器 二. 类型萃取机 2.1 处理类实现的迭代器 2.2 处理原生指针实现的迭代器 三. advance 3.1 iterator_category 3.2 激活重载机制 3.3 实现 ...

  4. STL源码剖析学习七:stack和queue

    STL源码剖析学习七:stack和queue stack是一种先进后出的数据结构,只有一个出口. 允许新增.删除.获取最顶端的元素,没有任何办法可以存取其他元素,不允许有遍历行为. 缺省情况下用deq ...

  5. 《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法1

    最近在看侯捷的<STL源码剖析>,虽然感觉自己c++看得比较深一点,还是感觉还多东西不是那么明白,这里将一些细小的东西或者概念记录一下. 有些东西是根据<C++编程思想>理解的 ...

  6. 《STL源码剖析》学习--6章--_rotate算法分析

     最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. <STL源码剖析>学习--6章--random access ite ...

  7. 《STL源码剖析》学习--6章--power算法分析

    最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. 6章--power算法分析 书本中的算法如下所示: template <clas ...

  8. STL源码剖析——P142关于list::sort函数

    在list容器中,由于容器自身组织数据的特殊性,所以list提供了自己的排序函数list::sort, 并且实现得相当巧妙,不过<STL源码剖析>的原文中,我有些许疑问,对于该排序算法,侯 ...

  9. STL源码剖析---红黑树原理详解下

    转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7760584       算法导论书上给出的红黑树的性质如下,跟STL源码 ...

最新文章

  1. 11个三相异步电动机常见故障与维修方法。
  2. DWR推送的一些随笔
  3. Dubbo学习总结(2)——Dubbo架构详解
  4. 递推-练习2--noi3525:上台阶
  5. 信管 - 挣值 - 资料收集
  6. 以前自己用SDL写的一个小游戏:QuadraPop
  7. 2022年上半年系统集成项目管理工程师下午真题及答案解析
  8. android 仿站小工具,仿站小工具下载
  9. 计算机页面排版的笔记,爱记笔记却懒得排版?这款笔记 App 为你准备了最实用的经典模板:格子笔记...
  10. 在亚马逊工作是怎样一种体验?
  11. 恶劣的仿造文化:从meebo到米博
  12. rasp 系统_RASP 完爆 WAF 的5大理由!
  13. 阿里天池街景字符编码YOLO5方案
  14. 如何去除 录像开始和结束时 的噔噔噔噔声音
  15. 乐吾乐2D可视化绘图引擎
  16. 从华为P20开始的脑洞之旅:AI如何改变未来手机生活
  17. PHP中exit()与die()的区别
  18. JAVA+TEXT+小说速读训练器
  19. 欧式距离和马氏距离的关系(公式推导)
  20. 在 Mac 上重命名 Apple Magic Mouse的方法!

热门文章

  1. Spring项目的resources目录下的文件读取
  2. 行业盛会2014中国网络安全大会即将召开
  3. Suggestive Annotation: A Deep Active Learning Framework for Biomedical Image Segmentation
  4. QT之“蛛网图”自绘控件
  5. 在污水测量中各种不同的技术条件下的流量计选型说明
  6. QT-自动在线翻译工具,适用于国际化多语言应用
  7. estore电子商城-知识整合
  8. 基于esp32/8266语音门铃对讲机系统设计语音传输实时udp,espnow传输图像
  9. C++子线程让主线程执行回调
  10. 【Matlab 图像】图像颜色反转