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

不抛出异常-------前提是对“比较准则”执行复制/赋值操作时不抛出异常

*《C++标准程序库》



STL容器能力一览表和各个容器操作函数异常保证的更多相关文章

  1. 条目七《如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉》

    如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉 在STL中容器是智能的,可以在容器销毁时自动调用容器里对象的析构函数来销毁容器存储的对象. STL的容器虽然比较智能 ...

  2. STL源码剖析——序列式容器#1 Vector

    在学完了Allocator.Iterator和Traits编程之后,我们终于可以进入STL的容器内部一探究竟了.STL的容器分为序列式容器和关联式容器,何为序列式容器呢?就是容器内的元素是可序的,但未 ...

  3. STL的基本使用之关联容器:map和multiMap的基本使用

    STL的基本使用之关联容器:map和multiMap的基本使用 简介 map 和 multimap 内部也都是使用红黑树来实现,他们存储的是键值对,并且会自动将元素的key进行排序.两者不同在于map ...

  4. STL的基本使用之关联容器:set和multiSet的基本使用

    STL的基本使用之关联容器:set和multiSet的基本使用 简介 set 和 multiSet 内部都是使用红黑树来实现,会自动将元素进行排序.两者不同在于set 不允许重复,而multiSet ...

  5. STL(标准模板库)理论基础,容器,迭代器,算法

    基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.   ...

  6. 004-docker命令-容器生命周期管理、容器操作

    1.容器生命周期管理 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: - ...

  7. STL学习笔记(序列式容器)

    Vector Vector是一个动态数组. 1.Vector的操作函数 构造.拷贝和析构 vector<Elem> c //产生一个空vector ,其中没有任何元素 vector< ...

  8. 容器大小的改变以及容器操作可能使迭代器失效、vector对象的容量变化

    1 改变容器的大小 我们可以使用resize来增加或缩小容器,与往常一样,array不支持resize.如果当前大小大于所要求的大小,容器后面的元素会被删除:如果当前大小小于新大小,会将新元素添加到容 ...

  9. Docker系列(二)镜像下载、操作容器、镜像导入导出等操作

    一.镜像操作 列出镜像 $sudo docker images 从dockerhub检索image $docker search image_name 下载image $docker pull ima ...

随机推荐

  1. 什么叫做VC维

    参考<机器学习导论> 假设我们有一个数据集,包含N个点.这N个点可以用2N种方法标记为正例和负例.因此,N个数据点可以定义2N种不同的学习问题.如果对于这些问题中的任何一个,我们都能够找到 ...

  2. Spring MVC 学习)——控制器与@RequestMapping详解

    Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解 一.控制器定义 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求 ...

  3. 用newLISP通过SMTPserver发送邮件

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/sheismylife/article/details/26633073 直接使用标准模块smtpx. ...

  4. C#编程之IList<T>、List<T>、ArrayList、IList, ICollection、IEnumerable、IEnumerator、IQueryable 和 IEnumerable的区别

    额...今天看了半天Ilist<T>和List<T>的区别,然后惊奇的发现使用IList<T>还是List<T>对我的项目来说没有区别...  在C#中 ...

  5. JMeter:生成漂亮的多维度的HTML报告

    JMeter:生成漂亮的多维度的HTML报告我们做性能测试的时候会经常使用一些性能测试工具,我个人比较喜欢Jmeter这个工具,但是JMeter这个工具在生成测试报告方面一直有所欠缺.但是JMeter ...

  6. ThinkPHP 5 中的 composer.json

    本篇并不是揭 ThinkPHP 5 的问题. 只是通过 composer.json 来学习 compoer.json 元旦那天, ThinkPHP 5.1 正式发布,值得庆祝. 之后的第二天有人反馈 ...

  7. 怎样在两小时内搞定 OpenStack 部署?(转)

    怎样在两小时内搞定 OpenStack 部署? OpenStack的安装是一个难题,组件众多,非常麻烦.如果手工部署OpenStack,可能需要好几天,使用RDO,就是几个命令,再加一两个小时的等待. ...

  8. OAuth 2.0:Bearer Token、MAC Token区别

    Access Token 类型介绍 介绍两种类型的Access Token:Bearer类型和MAC类型 区别项 Bearer Token MAC Token 1 (优点) 调用简单,不需要对请求进行 ...

  9. SpringMVC Controller 介绍及常用注解

    摘要: @Controller.@RequestMapping(属性:value.params .method.headers).@PathVariable.@RequestParam.@Cookie ...

  10. Qt下 QString转char*(转)

    Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的 ...