(一)STL体系结构基础介绍

一、STL六大部件

  容器(Containers):存放元素,内存由分配器搞定

  分配器(Allocator):支持容器的内存分配

  算法:操作容器元素的函数。与OO不同(面向对象将元素与函数放到一个类里),GP(模板编程)将数据放入容器,操作方法放入算法中。

  迭代器(Iterator): 算法和容器之间的桥梁,通过迭代器,算法才能去操作容器中的元素。迭代器就是泛化的指针。

  适配器(Adapters):对其他组件进行转换。

  仿函数(Functors):自定义类的相关操作(比如自定义类A,计算其两个实例的相加、相减等,即操作符重载)。

二、一个例子使用六大部件

  通常allocator那部分不用写。

三、容器遍历

  前闭后开区间

  

  使用auto,for遍历

  

  auto的其他用法

   

四、容器结构与分析

  1、顺序容器

  Array:固定大小,连续空间存放

  Vector: 当容量不够时,allocator在背后重新分配

  Deque: 双端队列

  List: 双向链表

  ForwardList:单向链表

  

  2、关联容器(包括Unordered_Containers)

  

  关联容器的查找很快

  Map/Set:一般用红黑树实现(左右高度平衡的二叉树)

  MultiMap/MultiSet: key可重复的。

  Map是key-value,Set是key-key。

  无序容器:元素存放的位置是不固定的,由hash-table实现(目前最好的实现方式是seperate chaining)。

五、容器使用

  1、编码习惯

     (1)为每个独立的程序创建namesapce;

     (2)  在用到变量时才定义变量,但不缩进;

  2、vector

    (1)因为单向,只能通过push_back存放元素(从头存放需要移动整个vector);

    (2)   当空间不足,重新分配内存时,内存两倍增长;

    (3)可以通过front,back访问首尾元素,data访问首地址(vector, array, list);

  3、List

     标准库有sort,各个容器也有自带sort,排序尽量用自带的sort。每次扩充一个结点,空间利用率高

 4、forwad_list

      (1)压入元素用的是push_front(其他用的都是push_back);

    (2)只有front访问首元素(back,size都不提供);查找较慢。

5、deque

   (1)内存分段连续(由buffer构成,每个buffer是连续的),当内存不够时,重新分配一个buffer。 

   (2)没有自带的sort,只能使用全局的sort

   

6、stack、queue

    内部都是通过deque来实现,一个后进先出,一个先进先出(不提供iterator)。有人也称之为容器的适配器(Adapter)

      

7、multiset/multimap

  (1)通过insert插入元素(会慢一点),有自带的find进行查找(很快)

  (2)multimap: c.insert(pair<int, string>(i, buf)),不能使用c[i]来进行插入(key可能重复)

  (3)查找时(*item).first为key,second为value

8、unordered_multiset/unordered_multimap

哈希表实现

9、map

可通过m[i]=c来插入,内部会形成pair<>(i, c)来进行插入 

原文地址:https://www.cnblogs.com/573177885qq/p/9933469.html

时间: 2024-11-05 19:31:01

(一)STL体系结构基础介绍的相关文章

STL vector的介绍(1)

尝试下翻译STL里面的一些容易和算法.四级过了,六级刚考.顺便练练自己的英语水平,翻译的不好的地方请大神多多指教哈,方便我改正. 原来均来自:http://www.cplusplus.com/ template < class T, class Alloc = allocator<T> > class vector; // generic template Vector Vectors are sequence containers representing arrays that

【简译】jQuery对象的奥秘:基础介绍

本文翻译自此文章 你有没有遇到过类似$(".cta").click(function(){})这样的JavaScript代码并且在想“$('#x')是什么”?如果这些对你想天书一样,请往下读.如果你认为这些代码不可能是真的,请浏览一些jQuery例子,他们都是这种结构. 这篇文章覆盖了像下面一样吓人的代码片段中涉及的关键概念.我们以一个长例子开始,这个长例子是基于一个让一个正方形运动的简单例子(a simple example of animating a square).你可能不需要

Zabbix 3.0 基础介绍 [一]

Zabbix 3.0 基础介绍 [一] zabbix 一.Zabbix介绍 zabbix 简介   Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利   zabbix是一个基于Web界面的,提供分布式系统监控以及网络监视功能的企业级的开源解决方案.   zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题

【OpenGL】“我叫MT”纯手工3D动画制作之1——基础介绍

最近在家研习面经,温习基础,索性花些时间将本科期间完成的一些学习之作整理出来,分享之余顺便水点经验 其实这个事情起源于一门“计算机图形与动画(Computer Graphics & Animation)”的外方课程,当初的外籍教师Tony教的很认真,对于这门课自己也投入了非常多的时间.言归正传,这里先介绍一些涉及的技术,熟悉的同学请跳过哈~ A.几何物体建模 带阴影的后面我会介绍到的哦~ 加下划线的后面我后面会举栗子的哦~ B.涉及的图形学技术与应用 C.动画技术 参考文献 1.王汝传,张登银,

qt model/view 架构基础介绍之QTreeWidget

# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅助类 # QTreeWidgetItem 一起使用.不过,既然是提供方面的封装类,即便是看上去很复杂的树, # 在使用这个类的时候也是显得比较简单的 __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt impor

qt model/view 架构基础介绍之QTableWidget

# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅助类 # QTreeWidgetItem 一起使用.不过,既然是提供方面的封装类,即便是看上去很复杂的树, # 在使用这个类的时候也是显得比较简单的 __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt impor

Erlang基础 -- 介绍 -- Wordcount示例演示

在前两个blog中,已经说了Erlang的历史.应用场景.特点,这次主要演示一个Wordcount的示例,就是给定一个文本文件,统计这个文本文件中的单词以及该单词出现的次数. 今天和群友们讨论了一个问题,突然一下子就上升到哲学角度上了,装逼装大发了. PS:图片中有错别字,%s/财务和其他9个月/财务和其他9个人/g 不过真心想说的一点是,把Erlang系统,映射到现实中,很多奇葩问题,就能迎刃而解了.所以,在下面的简要设计中,我就尽可能的代入一下现实世界吧. 环境安装 mac 的话,用brew

qt model/view 架构基础介绍之QListWidget

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt import * from PyQt4 import QtGui, QtCore from PyQt4.QtCore import * import sys # MVC是Model-View-Controller的简写,即模型-视图-控制器 #model/view框架将传统的mv模型分

Avaya Exrience Portal(AEP)基础介绍 二(四大组件总结)

什么是Avaya Exrience Portal(AEP)? 1:提供语音(或者多媒体)自动化用户体验的软件平台:  2:基于标准的VXML(定义了如何使用语音识别.语音合成.互联网访问.数据库访问.语音文件播放.DTMF输入等功能开发一个完整的语音应用系统.)和CCXML(它基于XML定义了一系列开放标准的呼叫控制API)的应用:  3:支持多媒体处理:  4:完全基于Web架构:  5:支持TTS文语转换和语音识别技术:     2)AEP包含的组件   EPM:AEP集成的管理,报表,监控