STL基础知识
一,STL的组成
1.什么是STL
STL(Standard Template Library)标准模板库的简称,是由惠普开发的一系列软件的总称,STL现在是C++的一部分,已经被构建于编译系统之内,所以不需要再引入。
2.STL的组成部分
- 容器(containers):是一种数据结构容器,使用类模板的方式提供,我们可以方便的进行数据的存储操作。
- 适配器(adapters):以序列式容器为基础,提供的栈,队列和优先级队列的这种容器。
- 迭代器(iterators):类似于指针,用来操作容器的对象。
- 算法(algorithm):包含一系列的常见算法。
- 空间配置器(allocator):其中主要工作包括两部分:1,对象的创建与销毁。2,内存的创建与释放。
- 仿函数(functor):仿函数又称为函数对象,其实就是重载了()操作符的struct,没有什么特别的地方。
二,STL的容器
1,序列式容器
- 每个元素都有固定位置,取决于插入时机和地点。与元素值无关。
- vector(向量):底层数据结构是数组,可以随机存取数据元素(用索引直接存取),数组的尾部添加和移除元素很快,但在头部和中部插入元素比较耗时。
- deque(双端队列):底层数据结构是数组,可以随机存取数据元素,在数组的头部和尾部插入和删除元素很快。
- list(列表):底层数据结构是双向链表,不提供随机存取数据元素(需要按顺序走到要存取的元素),在任何位置插入和删除都很快,只需要简单的移动一下指针。
2,关联式容器
- 元素位置取决于特定的排序准则,和插入的顺序无关,底层数据结构为二叉树。
- set(集合):内部元素依据其值自动排序,set内相同的数值元素只能出现一次。
- multiset(多重集合):内部元素依据其值自动排序,set内允许出现重复的元素。
- map(映射):map的元素是成对的键值对,内部元素的值依据键自动排序,键只允许出现一次。
- multimap(多重映射):多重映射是map的增强版,允许键出现多次。
三,STL的适配器
1.什么是适配器
STL提供了三种适配器stack,queue和priority_queue。这些适配器是包装了序列式容器(vector,deque,list)中的一种。因此所谓的适配器就是序列式容器的包装器,注意:适配器没有提供迭代器。
2.stack(栈)
栈可以使用序列式容器中的vector,deque,list中的任意一种作为其底层的数据结构。默认是使用deque来实现的stack。
3.queue(队列)
队列可以使用deque和list中的任意一种作为其底层的数据结构。默认是使用deque来实现的queue。
4.priority_queue(优先队列)
优先队列也是一种队列,不过在进入队列之后会对元素进行排序,可以使用vector和deque来实现其底层结构,默认是使用vector来实现priority_queue。
5.序列式容器和适配器比较

STL基础知识的更多相关文章
- 浅析C++基础知识
近期想对C++的面试题目进行一下更加详细的整理.事实上认真思考一下C++程序猿的面试,我们能够发现对程序猿的能力的考察总是万变不离当中,这些基础知识主要分为五部分:一. C/C++基础知识 二. C/ ...
- C++ 顺序容器基础知识总结
0.前言 本文简单地总结了STL的顺序容器的知识点.文中并不涉及具体的实现技巧,对于细节的东西也没有提及.一来不同的标准库有着不同的实现,二来关于具体实现<STL源码剖析>已经展示得全面细 ...
- 面试基础知识集合(python、计算机网络、操作系统、数据结构、数据库等杂记)
python python _.__.__xx__之间的差别 python中range.xrange和randrange的区别 python中 =.copy.deepcopy的差别 python 继承 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
随机推荐
- Jenkins email-ext邮件通知模板
http://blog.csdn.net/houyefeng/article/details/51344337 示例 以html格式发送送如下内容:邮件内容为项目名称.构建次数.触发原因.构建日志前1 ...
- getByClassName2016/4/21
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- [原]点击按钮,表格隔行变色:偶数行为黄色背景,奇数行为默认颜色。通过table的getElementsByTagName取得所有的tr,依次遍历,如果是偶数就…………。
window.onload = function () { document.getElementById('btn').onclick = function () { ...
- Windows应用程序要点
一个完整的Windows应用程序除了WinMain函数外,还包含用于处理用户动作和窗口消息的窗口函数. Windows应用程序具有的一些特性: 消息驱动机制 图形设备接口(GDI) 基于资源的程序设 ...
- chromium blog
http://blog.chromium.org/
- Struts2 语法--验证方式:
第一种方式: 重写validation方法, ====验证action中所有的方法: 1. 在UserAction1里重写validation: @Override public void valid ...
- CentOS 6.5 开机启动指定服务
gedit /etc/rc.d/rc.local #关闭防火墙 service iptables stop #开启samba服务 service smb start #开启ntopng 端口5000 ...
- Spring MVC之视图解析器
Spring MVC提供的视图解析器使用ViewResolver进行视图解析,实现浏览器中渲染模型.ViewResolver能够解析JSP.Velocity模板.FreeMarker模板和XSLT等多 ...
- MFC中的NMHDR结构体和NMUPDOWN结构体
建立spin控件,创建UDN_DELTAPOS一个消息函数后: void CSpinDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) { NM ...
- MySQL:MySQL的安装
一.Linux:MySQL的源码安装 1.安装前的准备 在安装之前需要安装一下必备的包和工具 gcc/g++:MySQL5.6开始,需要使用g++进行编译. cmake:MySQL5.5开始,使用cm ...