Lists使用一个doubly linded list(双向链表)来管理元素,决定了list的内部结构和vector与deque迥然不同,所以先在几个主要方面与前述二者存在明显的区别。
根据链表的性质,list不支持随机存取,意思是如果你想存取第i位置上的元素就必须顺着链表访问到i位置。
任何位置上的插入删除操作都能在常数时间内完成,毕竟无需移动任何元素只通过内部的一些指针操作即可。
安插和删除动作不会导致指向其他各元素的各个pointers、references、iterators失效。
list对于异常有这样的处理方式:要么成功,要么什么都不发生。
- 由于不支持随机存取,list即不提供下标操作符也不提供at()
- list并未提供容量capacity()、空间重新分配reverse()等操作函数,因为全无必要。每个元素都有自己的内存,在被删除之间一直有效。
- list提供了不好特殊的成员函数,专门用于移动元素。较之同名的STL通用算法, 这些函数执行起来更快,因为无需拷贝和移动,只需调整若干指针即可。