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. mysql_query — 发送一条 MySQL 查询

    仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回 一个资源标识符,如果查询执行不正确则返回 FALSE.对于 其它类型的 SQL 语句,在执行成功时返回 TRUE,出错时返 ...

  2. ios 从网络上获取图片

    -(UIImage *) getImageFromURL:(NSString *)fileURL { NSLog(@"执行图片下载函数"); UIImage * result; N ...

  3. jsp:incloud用法

    为什么要用jsp:incloud 因为单独一个页面太大,需要嵌套子页面,当请求有父页面的时候,子页面会自动加载<jsp:include page="/agentProfitShareN ...

  4. This App does not have access to your photos or videos in iOS 9

    出现这个总是由于info.plist文件内的CFBundleDisplayName没有值或者为空.把名称填进去就可以用了.

  5. BitBlt函数的绘制属性

    BOOL BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int ...

  6. select 从应用层到内核实现解析

    在一个应用中,如果需要读取多个设备文件,这其中有多种实现方式: 1.使用一个进程,并采用同步查询机制,不停的去轮询每一个设备描述符,当设备描述符不可用时,进程睡眠. 2:使用多个进程或者线程分别读取一 ...

  7. Codeup1085: 阶乘的和

    题目描述 有些数可以表示成若干个不同阶乘的和.例如,9=1!+2!+3!.小明对这些数很感兴趣,所以他给你一个正整数n,想让你告诉他这个数是否可以表示成若干个不同阶乘的和. 输入 输入包含多组测试数据 ...

  8. layer关闭弹出层总结

    //关闭方法1 layer提供了5种层类型.可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层). 若你采用layer.open({type: 1})方式调用, ...

  9. k8s dockerk个人学习(2)

    部署nginx和应用 部署nginx时我们需要把nginx的配置文件那出来便于以后修改nginx的配置,放置nginx配置文件时我们用k8s的pv的存储方式来存放这些文件 1.安装nfs服务,在kub ...

  10. 利用GPU改善程序性能的一点心得

    1.     硬件方面 a. 流处理器个数    Gpu内部的计算单元个数,决定分析模块实时性的关键因素.    实测效果: gtx760  1152个 Gtx960  1024个 单路1080p运动 ...