STL各种容器的特征
1.vector
内部数据结构:数组
随机访问每个元素
在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素随元素数目呈线性变化。
vector的迭代器在内存重新分配时将失效(它所指向的元素在操作前后不一样)
vector迭代器的失效情况:
(1)当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。
(2)当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时begin和end操作返回的迭代器都会失效。
(capacity和size的区别:size是容器当前拥有的元素个数,而capacity则指容器在必须分配新存储空间之前可以存储的元素总数。)
(3)当进行删除操作(erase,pop_back)后,指向删除点的迭代器全部失效;指向删除点后面的元素的迭代器也将全部失效。
2.deque
内部数据结构:数组
随机访问每个元素
在开头或末尾增加或删除元素所需时间与元素数目无关,在中间增加或删除元素所需时间随元素数目线性变化
deque迭代器的失效情况:
(1)在deque容器首部或者尾部插入元素不会使得任何迭代器失效。
(2)在其首部或尾部删除元素则只会使指向被删除元素的迭代器失效。
(3)在deque容器的任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器失效。
3.list
内部数据结构:双向循环链表
不能随机访问每一个元素
可双向遍历
在开头,末尾和中间增加或删除元素所需时间都为常量
增加元素迭代器不会失效,删除元素,指向当前被删除元素的迭代器会失效
4.queue
队列
元素只能先进先出(FIFO)。
5.map
键唯一。
元素默认按键的升序排列。
如果迭代器所指向的元素被删除,则该迭代器失效。其它任何增加、删除元素的操作都不会使迭代器失效。
6.set
键和值相等。
键唯一。
元素默认按升序排列。
如果迭代器所指向的元素被删除,则该迭代器失效。其它任何增加、删除元素的操作都不会使迭代器失效。