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. 玩转TypeScript(5)--环境声明

    环境声明为TypeScript引入了一个作用域,但是对于产生的javaScript程序不会有任何影响.程序员可以使用环境声明来告之TypeScript,一些其他的组将将提供变量的声明.比如,默认情况下 ...

  2. 如何在win10(64位系统)上安装apache服务器

    今天装了Apache服务器,下面是我总结的方法: 一,准备软件 1.64位的apache版本 传送门:http://www.apachelounge.com/download/ 2.VC11运行库 下 ...

  3. 【c++基础】如何获取工程项目当前路径

    工程项目当前路径 #include <direct.h> int main( ) { ]; _getcwd(buffer, ); std::cout << buffer < ...

  4. opencv-python教程学习系列5-处理鼠标事件

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍opencv-python处理鼠标事件,坚持学习,共同进步. 系列教程参照OpenCV-Pytho ...

  5. c4 L3-001 找零钱 (简单01背包-输出最小字典序解(用vector保存当前最优解))

    #include <iostream> #include <algorithm> #include <vector> #include <cstdio> ...

  6. JS经典面试题

    自己总结了一些JS面试题 希望能够帮助正在找工作的程序猿(●´∀`●) 1.js 实现一个函数对javascript中json 对象进行克隆 var oldObject ="sdf" ...

  7. FSTConfiguration 高性能序列化框架FST

    转自:https://blog.csdn.net/z69183787/article/details/53005961 fst是完全兼容JDK序列化协议的系列化框架,序列化速度大概是JDK的4-10倍 ...

  8. 【BZOJ1702】[usaco2007margold]队列平衡

    原来蛤习线性探测的时候要每次加一个稍大一点的数而不是每次+1……连蛤习都不会写,我tmd是有多弱 原题: N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色, ...

  9. Android和Linux下设备节点的创建笔记

    1. Linux kernel创建的/dev/下的设备节点是不对的, 其实是kernel仅负责在/sys/(基于内存的虚拟文件系统)创建一大堆下目录和文件,而真正的设备节点是在用户空间程序创建的,应该 ...

  10. leetcode:Single Number【Python版】

    1.用双重循环逐个遍历(超时) 2.用list B的append和remove函数(超时) 3.用dict B(AC) class Solution: # @param A, a list of in ...