STL顺序容器

一、顺序容器概述

1.1

     vector  可变大变小数组。支持快速随机访问,在尾部之外的位置插入或删除元素可能很慢
     deque 双端队列。支持快速随机的访问,在头尾位置插入/删除速度很快
      list 双向链表。只支持双向顺序访问,在list中任何位置进行插入/删除操作速度都很快
  forward_list 单向链表。只支持单向顺序访问,在链表任何位置进行插入/删除操作速度都很快
     array 固定大小数组。支持快读随机访问。不能添加或删除元素
     string 与vector相似的容器。但专门用于保存字符。随机访问快,在尾部插入/删除速度很快






   







string和vector将元素保存在连续的内存空间中,进行插入/删除操作后,需要移动插入/删除位置之后的左右元素,来保持连续存储。

二、容器库概览

2.1

当将一个容器初始化为另一个容器的拷贝时,两个容器的容器类型和元素类型都必须相同

list name = {"Tom", "Jim","Kitty"};

vector item = {"he","she","me"};


list list1(name);   //true

list      list2(name);   //false 元素类型必须相同

vector vector1(name);   //false 容器类型必须相同


//ture (array除外)拷贝由一个迭代器对指定的元素范围,不要求容器类型和元素类型相同

fowared_list list3(item.begin(), item.end());

2.2

int age[5] = {0,1,2,3,4};

int cpy[5] = age;  //false 内置数组不支持拷贝或赋值


array digits = {0,1,2,3,4};

array copy = digits;   //true 只要数组类型匹配即合法

三、顺序容器操作

3.1 使用emplace操作

     调用emplace_front、emplace和emplace_back等成员函数时,则是将参数传递给元素类型的构造函数,emplace成员使用这些参数再容器管理的内存中直接构造元素。而调用push或insert成员函数,是将元素类型的对象传递给他们,这些对象被拷贝到容器中。

3.2 访问元素

       在容器中访问元素的成员函数(front、back、下标和at)返回的都是引用。

     如果容器是一个const对象,返回值是const的引用。如果容器不是const的,则返回值是普通引用,可以改变元素的值。

3.3 forward_list

STL顺序容器_第1张图片

四、vector对象是如何增长的

STL顺序容器_第2张图片

五、容器适配器

三个顺序容器适配器:stack、queue和priority_queue

默认情况下,stack和queue是基于deque实现的,priority_queue是在vector之上实现的

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