STL容器能力一览表和各个容器操作函数异常保证
VectorDequeListSet
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 | 不抛出异常-------前提是对“比较准则”执行复制/赋值操作时不抛出异常 |
更多推荐
所有评论(0)