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 |
不抛出异常-------前提是对“比较准则”执行复制/赋值操作时不抛出异常 |