C++之STL(序列型容器概览)(蓝桥杯备战)

序列型容器概览

1.vector

定义在头文件

实际上是一个动态数组 随机存取任何元素都能在常数时间完成。在尾端增删元素具有较佳的性能。

2.deque(双端队列)

定义于

也是个动态数组,随机存取任何元素都能在常数时间完成(但性能次于vector)。在两端增删元素具有较佳的性能。

3.list(双向链表)

任意位置插入和删除元素的效率都很高

不支持随机存取

每个元素还有指针占用额外空间

PS:在序列容器中,元素的插入位置同元素的值无关

基本操作

1.初始化

默认构造函数初始化

vector vec;
list list1;
deque deq;

拷贝构造函数初始化

vector vec1; 
vector vec2(vec1); 

list list1; 
list list2(list1); 

deque deq1;
deque deq2(deq1); 

创建有长度为10的容器

vector vec(10);
list list1(10);
deque deq(10);

创建有10个初值的容器

vector vec(10,"hi");
list list1(10, 1);
deque deq(10, "hi");

2.访问元素

c.back()

返回容器c的最后一个元素的引用

c.front()

返回容器c的第一个元素的引用

c[n]

返回下标为n的元素的引用(0<=n只适用于vector和deque容器

c.at[n]

返回下标为n的元素的引用(0<=n只适用于vector和deque容器

3.添加元素

c.push_back(t)

在容器c的尾部添加值为t的元素。返回void类型

c.push_front(t)

在容器c的前端添加值为t的元素。返回void类型,只适用于list和deque

c.insert(p,t)

在迭代器p所指向的元素前面插入元素t。返回指向新添加元素的迭代器

c.insert(p,n,t)

在迭代器p所指向的元素前面插入n个值为t的新元素,返回void类型

c.insert(p,b,e)

在迭代器p所指向的元素前面插入迭代器b和e标记的范围内的元素。返回void类型

4.删除元素

c.pop_back()

删除容器c的最后一个元素

c.pop_front()

删除容器c的第一个元素,只适用于deque和list容器

c.erase(p)

删除迭代器p指向的容器中的元素

c.erase(b,e)

删除迭代器b和e所标记范围内的元素(前闭后开区间)

c.clear()

删除容器中所有的元素

选用规则

  • 如果程序要求随机访问元素,则应用vector或者 deque容器
  • 如果程序必须在容器中间位置插入或删除元素,则应采用list容器
  • 如果程序不是在容器的中间位置,而是在容器的首部或尾部插入或删除元素,则应采用deque容器

你可能感兴趣的:(C++)