顺序容器(C++)

STL中提供的顺序容器包括:vector、list、deque、string。

  • vector容器在堆空间中建立了一个一维数组,地址空间是连续的,支持快速随机访问。但是在vector中插入删除元素的效率较低,插入操作会导致插入位置及其后面的元素向后移动,删除元素和会导致删除位置之后的元素向前移动。在vector尾部插入删除元素最快,不需要移动任何元素;在头部插入删除元素最慢,需要移动所有元素。
  • list的本质是一个双向链表,链表中逻辑相邻的结点在物理上并不相邻,逻辑相邻的结点通过指针关联,支持任意位置的快速插入和删除,找到插入删除的位置之后只需修改相关指针即可。但是list由于物理空间不连续,因此不支持快速随机访问,只能从链表的表头开始顺序遍历。
  • deque容器内部的实现比较复杂。与vector类似,deque随机访问元素的效率很高,接近vector,但是向任意位置插入删除元素的效率一般,远逊于list,但强于vector,在某些情况下甚至比vector要好得多。此外deque的头部和尾部插入、删除元素都很快,而vector只在尾部插入、删除元素时很快。
  • string可以理解为元素类型为char的vector容器。string的性质也与vector相似,只是string提供了丰富的字符串处理函数,方便对字符串进行操作。
  • vector和deque都设计动态申请空间的问题。vector在数组已满的情况下会申请一块更大的空间,将所有数据拷贝到新空间。deque在首段数据空间或尾段数据空间已满的情况下会申请一段新空间,附加到整个deque的空间中,在首段数据空间或尾端数据空间为空的情况下会将这段空间释放,从整个deque的空间中移除。
  • 遍历容器操作通常使用迭代器,每种容器都有自己的迭代器。迭代器就好像指向容器元素的指针,对迭代器解引用可以获得容器的元素。容器迭代器可以操作[begin,end)之间的元素,begin迭代器指向容器首元素,end迭代器指向容器尾元素之后的位置。
  • 创建顺序容器时需要指定容器中元素的类型,可以是基本类型,也可以是自定义类型。参数中可以指定顺序容器初始状态的大小,在指定大小的前提下,可以进一步指定容器元素的初始值。容器的创建方式如下:
  • vector<int> v;
  • vector<int> v(10)//指定容器大小
  • vector<int> v(10,-1);//指定容器大小和元素初始值

猜你喜欢

转载自blog.csdn.net/zrh_CSDN/article/details/81050274