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. FMX StringGrid向上滑动自动加载记录(一)

    有时候,做的app还是需要用StringGrid来显示数据,但如果用StringGrid的Livebinding绑定到一个数据集TDataset,当记录超过1000条时,效率非常低,甚至达不到实用状态 ...

  2. 利用Teensy进行em410x卡模拟以及暴力破解em410x类门禁系统

    什么是低频?什么是EM410x? 首先,我不得不再次提一下那些工作在125khz频率下的低频卡(如:EM410X之类的),以便大家更好的阅读以下的内容. 什么是低频?以下就是低频的解释: 低频(LF, ...

  3. Jmeter实现MySQL的增删改查操作

    环境: JDBC驱动:mysql-connector-java-5.1.7-bin Jmeter:Jmeter3.0 1.导入JDBC驱动:测试计划-->浏览-->选择mysql-conn ...

  4. 关于XCode 的agvtool命令行

    简介:用agvtool如何来自动更新版本号和bulid version   agvtool是一个命令行工具,允许你自动递增到下一个最高的数量或具体的数字这些数字.本文档提供了更新您的构建和版本号码使用 ...

  5. BZOJ4767: 两双手【组合数学+容斥原理】

    Description 老W是个棋艺高超的棋手,他最喜欢的棋子是马,更具体地,他更加喜欢马所行走的方式.老W下棋时觉得无聊,便决定加强马所行走的方式,更具体地,他有两双手,其中一双手能让马从(u,v) ...

  6. maven quick start

    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-a ...

  7. LeetCode Pascal's Triangle && Pascal's Triangle II Python

    Pascal's Triangle Given numRows, generate the first numRows of Pascal's triangle. For example, given ...

  8. SQL Support and Workarounds

    此文章来自官方文档,说明了,对于不支持pg 标准的sql 查询的变通方法,实际使用的时候有很大的指导意义 As Citus provides distributed functionality by ...

  9. Java使用Unsafe接口操作数组Demo

    public class unSafeArrayDemo { private static final sun.misc.Unsafe UNSAFE; private static final lon ...

  10. tomcat源码阅读之生命周期(LifeCycle)

    一.事件机制流程: 1.     当外部事件源发生事件(比如点击了按钮,数据发生改变更新等)时,事件源将事件封装成事件对象Event: 2.     将事件对象交由对应的事件派发器Dispatcher ...