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. Python 之 解码汉字乱码(如果gbk、utf8都试过不行,可以试试这个)

    起因: 使用 requests.get(url) 获取页面内容,并打印出来后显示如下: 使用 type() 查看类型也是 <type 'unicode'> print [content] ...

  2. HDU1042N!大数的阶乘java模板

    import java.math.BigInteger; import java.util.Scanner; public class Main{ public static void main(St ...

  3. 【转】重装win7后,所有USB接口无法使用(鼠标、键盘、U盘)

    转自:https://blog.csdn.net/u010887744/article/details/45270245 今天给一朋友重装系统,华硕FX50J,修改BIOS重装了win7,结果所有US ...

  4. 使用git错误日志

    错误日志 pull错误 将远程仓库内容pull下来的过程中,碰到了拒绝合并两个不相关的历史,所以无法下载,同样的也无法push 但是我的东西明明是从组织里克隆下来的,只是做了一些修改 后来我我尝试不替 ...

  5. js获取 gps坐标

    if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(pos) { model.address. ...

  6. MySql5.5安装(windows)

    首先贴出安装包 32位安装包链接:https://pan.baidu.com/s/1AGLpcKv1I4kvWjPsVMyS8Q 密码:xypy 64位安装包链接:https://pan.baidu. ...

  7. python表单验证封装

    在Web程序中往往包含大量的表单验证的工作,如:判断输入是否为空,是否符合规则. <!DOCTYPE html><html><head lang="en&quo ...

  8. 03.将MPP部署到开发板上

    转载侵删 在一般的嵌入式开发中,只要将uboot,kernel,rootfs下载到开发板上,就可以进行程序开发了.但是海思又进一步的把一些常用视频编解码算法等封装到MPP平台中,进一步简化了工程师的开 ...

  9. 二分查找算法,java实现

    二分查找算法是在有序数组中用到的较为频繁的一种算法. 在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间复杂度为O(n),但二分查找算法则更优,因为其查找时间复杂度 ...

  10. markdown 知识点

    符号 说明 作用 ___ 三个下划线 一条直线 * 或_ 1个星号 或 1个下划线 文字斜体 ** 或__ 2个星号 或 2个下划线 文字加粗 全角2个空格 缩进2个汉字 竖线之间加3个间隔符放在第二 ...