STL容器能力一览表和各个容器操作函数异常保证
STL容器能力一览表
|
Vector |
Deque |
List |
Set |
Multiset |
map |
Multimap |
|
|
典型内部 结构 |
dynamic array |
Array of arrays |
Doubly Linked list |
Binary tree |
Binary tree |
Binary tree |
Binary tree |
|
元素 |
Value |
Value |
Value |
Value |
Value |
Key/value pair |
Key/value pair |
|
元素 可重复 |
是 |
是 |
是 |
否 |
是 |
对key而言否 |
是 |
|
可随机 存取 |
是 |
是 |
否 |
否 |
否 |
对key而言是 |
否 |
|
迭代器 类型 |
随机存取 |
随机存取 |
双向 |
双向元素被视为常数 |
双向元素被视为常数 |
双向key被视为常数 |
双向key被视为常数 |
|
元素搜寻 速度 |
慢 |
慢 |
非常慢 |
快 |
快 |
对key而言快 |
对key而言快 |
|
快速 安插移除 |
尾端 |
头尾两端 |
任何位置 |
--- |
--- |
--- |
--- |
|
安插移除 导致无效iterators,pointers, references |
重新分配时 |
总是如此 |
绝不会 |
绝不会 |
绝不会 |
绝不会 |
绝不会 |
|
释放被移 除元素之 内存 |
绝不会 |
有时会 |
总是如此 |
总是如此 |
总是如此 |
总是如此 |
总是如此 |
|
允许 保留内存 |
是 |
否 |
--- |
--- |
--- |
--- |
--- |
|
交易安全 若失败带 来任何影响 |
尾端push/pop时 |
头尾两端push/pop时 |
任何时候除了排序和赋值 |
任何时候除了多元素安插 |
任何时候除了多元素安插 |
任何时候除了多元素安插 |
任何时候除了多元素安插 |
各个容器操作函数异常保证
|
操作 |
页码 |
保证 |
|
Vector::push_back() |
241 |
要么成功,要么无任何影响 |
|
Vector::insert() |
240 |
要么成功,要么无任何影响------前提是元素的复制/赋值操作不抛出异常 |
|
Vector::pop_back() |
243 |
不抛出异常 |
|
Vector::erase() |
242 |
不抛出异常------前提是元素的复制/赋值操作不抛出异常 |
|
Vector::clear() |
244 |
不抛出异常------前提是元素的复制/赋值操作不抛出异常 |
|
Vector::swap() |
237 |
不抛出异常 |
|
Deque::push_back() |
241 |
要么成功,要么无任何影响 |
|
Deque::push_front() |
241 |
要么成功,要么无任何影响 |
|
Deque::insert() |
240 |
要么成功,要么无任何影响------前提是元素的复制/赋值操作不抛出异常 |
|
Deque::pop_back() |
243 |
不抛出异常 |
|
Deque::pop_front() |
243 |
不抛出异常 |
|
Deque::erase() |
242 |
不抛出异常------前提是元素的复制/赋值操作不抛出异常 |
|
Deque::clear() |
244 |
不抛出异常------前提是元素的复制/赋值操作不抛出异常 |
|
Deque::swap() |
237 |
不抛出异常 |
|
List::push_back() |
241 |
要么成功,要么无任何影响 |
|
List::push_front() |
241 |
要么成功,要么无任何影响 |
|
List::insert() |
240 |
要么成功,要么无任何影响 |
|
List::pop_back() |
243 |
不抛出异常 |
|
List::pop_front() |
243 |
不抛出异常 |
|
List::erase() |
242 |
不抛出异常 |
|
List::clear() |
244 |
不抛出异常 |
|
List::remove() |
242 |
不抛出异常-------前提是元素的比较操作不抛出异常 |
|
List::remove_if() |
242 |
不抛出异常-------前提是判断是predicate不抛出异常 |
|
List::unique() |
244 |
不抛出异常-------前提是元素的比较操作不抛出异常 |
|
List::splice() |
245 |
不抛出异常 |
|
List::merge() |
246 |
要么成功,要么无任何影响-------前提是元素的比较操作不抛出异常 |
|
List::reverse() |
246 |
不抛出异常 |
|
List::swap() |
237 |
不抛出异常 |
|
[multi]set::insert() |
240 |
要么成功,要么无任何影响-------对单个元素而言 |
|
[multi]set::erase() |
242 |
不抛出异常 |
|
[multi]set::clear() |
244 |
不抛出异常 |
|
[multi]set::swap() |
237 |
不抛出异常-------前提是对“比较准则”执行复制/赋值操作时不抛出异常 |
|
[multi]map::insert() |
240 |
要么成功,要么无任何影响-------对单个元素而言 |
|
[multi]map::erase() |
242 |
不抛出异常 |
|
[multi]map::clear() |
244 |
不抛出异常 |
|
[multi]map::swap() |
237 |
不抛出异常-------前提是对“比较准则”执行复制/赋值操作时不抛出异常 |
STL容器能力一览表和各个容器操作函数异常保证的更多相关文章
- 条目七《如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉》
如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉 在STL中容器是智能的,可以在容器销毁时自动调用容器里对象的析构函数来销毁容器存储的对象. STL的容器虽然比较智能 ...
- STL源码剖析——序列式容器#1 Vector
在学完了Allocator.Iterator和Traits编程之后,我们终于可以进入STL的容器内部一探究竟了.STL的容器分为序列式容器和关联式容器,何为序列式容器呢?就是容器内的元素是可序的,但未 ...
- STL的基本使用之关联容器:map和multiMap的基本使用
STL的基本使用之关联容器:map和multiMap的基本使用 简介 map 和 multimap 内部也都是使用红黑树来实现,他们存储的是键值对,并且会自动将元素的key进行排序.两者不同在于map ...
- STL的基本使用之关联容器:set和multiSet的基本使用
STL的基本使用之关联容器:set和multiSet的基本使用 简介 set 和 multiSet 内部都是使用红黑树来实现,会自动将元素进行排序.两者不同在于set 不允许重复,而multiSet ...
- STL(标准模板库)理论基础,容器,迭代器,算法
基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. ...
- 004-docker命令-容器生命周期管理、容器操作
1.容器生命周期管理 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: - ...
- STL学习笔记(序列式容器)
Vector Vector是一个动态数组. 1.Vector的操作函数 构造.拷贝和析构 vector<Elem> c //产生一个空vector ,其中没有任何元素 vector< ...
- 容器大小的改变以及容器操作可能使迭代器失效、vector对象的容量变化
1 改变容器的大小 我们可以使用resize来增加或缩小容器,与往常一样,array不支持resize.如果当前大小大于所要求的大小,容器后面的元素会被删除:如果当前大小小于新大小,会将新元素添加到容 ...
- Docker系列(二)镜像下载、操作容器、镜像导入导出等操作
一.镜像操作 列出镜像 $sudo docker images 从dockerhub检索image $docker search image_name 下载image $docker pull ima ...
随机推荐
- makefile的一个错误:*** missing separator
原文转自:http://blog.sina.com.cn/s/blog_87c063060101c9yp.html 1.在写 多目录下makefile的时候,碰到一个错误提示,让我纠结许久,后面还是解 ...
- Pycharm下tensorflow导入错误
问题: ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory 解决方案: L ...
- ztree树形菜单的增加删除修改和换图标
首先需要注意一点,如果有研究过树形菜单,就会发现实现删除和修改功能特别简单,但是增加却有一点复杂.造成这个现象是ztree树形菜单的历史遗留问题.大概是之前的版本没有增加这个功能,后来的版本加上了这个 ...
- vector类转换Mat类
前言 一个个数据push back到vector之后,可以使用Mat()函数将vector类型转换为Mat类型. 在opencv中Mat类的构造函数中有一个构造函数可以直接把vector类转换为Mat ...
- Potplayer快捷键
potplayer 滞后快捷键: x potplayer 滞后快捷键: c Crtl+C:截图到剪切板 Crtl+E:截图到安装目录Capture
- 轻松玩转AI 与PDF文件的转化(完美解决字体问题)
经过漫长而坚苦卓绝的研究查阅了网上无数资料下载了众多相关软件进行试验终于,找到搞定PDF文件的方便并且有效的办法PDF文件!你这个魔鬼!退去吧!!!! 难点一: 如何修改客户常常会提供不知道从哪里搞来 ...
- WinRAR备份技巧 - imsoft.cnblogs
RAR控制台日常备份策略 run.batrar a -ep1 -agYYYY{年}MM{月}DD{日} 备份 @list.txt-ep1是忽略原文件路径,rar包里是一堆文件,没有目录结构-ag附加命 ...
- Unity3D安卓程序中提示窗与常用静态方法封装
Unity3D/安卓封装SDK常用方法 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 IO -- - ...
- Tomcat问题:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined ,At least one of these environment variable is needed to run this program
一眼就能看出来是jdk的环境有问题,但是用了这么久的jdk一直都配置的好好的,怎么一到Tomcat上就这么矫情了. 最后查解决方案,原来是我的jdk从官网直接下载的,虽然我修改了java_home,但 ...
- xdoj 1044---炸红花 (话说 小时候经常玩这个被虐。。。。qwq)
// 我真的好笨 只会枚举 话说那个ac的370b到底是怎么做的 /(ㄒoㄒ)/~~ #include <iostream> #include <algorithm> usin ...