STL

vector

为了方便,本页面所有演示类型均为int

构造函数
  vector<int> v1;               //创建一个空容器
  vector<int> v2(n);            //创建一个长度为n的容器,所有元素默认为0
  vector<int> v3(n,value);       //创建一个长度为n的容器,所有元素默认为value
  vector<int> v4(start,end);    //(start和end为int*)创建一个容器,将start到end之间的内存复制给容器(左闭右开)
  vector<int> v5(v4);           //创建一个容器,其内容是v4的复制
  vector<int> v6={1,2,3,4,5};   //类似数组初始化
赋值(vector支持下标访问,也支持迭代器访问)
  vector<inr> v1={1,2,3},v2={4,5,6},v3;   //演示用

  v3.assign(n,value);                      //清空容器,让将n个value写入容器
  v3.assign(v1.begin(),v1.end());         //清空容器,将v1的部分(这里是全部)复制到v3(参数是指针,左闭右开)
  v3=v1;                                  //将v1复制给v3(重载=)
  v1.swap(v2);                            //交换v1和v2
大小和判断
  vector.size();//返回容器长度
  vector.empty();//判断容器是否为空
  vector.resize(n);//将容器长度设定为n,若容器边长则填充默认值,容器变小则丢弃多余值
  vector.resize(n,value);//将容器长度设定为n,若容器边长则填充value,容器变小则丢弃多余值
  vector.clear();//清空容器
访问、遍历

vector虽然支持下标访问,但不推荐,更推荐迭代器访问

  vector[n];                                         //直接下标访问,不推荐,越界访问编译不报错程序会卡死
  vector.at(n);                                      //vector内部at方法,返回下标为n的数据,越界访问编译报错
  for(vector<int>::iterator it=vector.begin();it!=vector.end();it++){  //迭代器
    cout<<*it;
  }
插入、删除、赋值
  vector.push_back(value);//在末尾插入value
  vector.pop_back();//从末尾弹出一个元素,返回这个元素
  vector.erase(pos);//删除pos位置的元素,返回指向pos位置的迭代器

  vectot.insert(pos,value);//在pos位置插入一个value,返回新数据的位置(迭代器)
  vectot.insert(pos,n,value);//在pos位置插入n个value,无返回值
  vectot.insert(pos,begin,end);//在pos位置插入[begin,end)间的数据,无返回值
vector中的迭代器
成员函数 功能(vecror<int> v={1,2,3,4}
begin() 返回容器第一个元素的正向迭代器(指向v[0]
end() 返回容器最后一个元素之后一个位置的正向迭代器(指向v[4]
rbegin() 返回容器最后一个元素的反向迭代器(指向v[3]
rend() 返回容器第一个元素之前一个位置的反向迭代器(指向v[-1]
vector中迭代器的失效

vector在进行扩容等内存移动的操作时,之前声明的迭代器会失效(成为野指针),需要重新赋值

使用insert(pos,value)函数触发扩容时会返回新vectorpos位置的迭代器,可以使用it=v.insert(n,value);来直接刷新迭代器`

deque

deque容器与vector容器相比只多了两个成员方法,其他的与vector容器用法相同,跳转

头部插入与弹出
  deque.push_front(value);//载体u不插入value
  deque.pop_front();//删除头部的一个元素,返回这个元素

list

list是一个双向链表

构造
  list<int> l1;               //构造一个空链表
  list<int> l2(5);            //构造一个长度为5的空链表,默认元素为0(int情况下)
  list<int> l3(5,9);          //构造一个长度为5的空链表,全部元素为9
  list<int> l4={1,2,3,4,5};   //构造一个长度为5的空链表,元素为1,2,3,4,5
  list<int> l5(l4);           //创建一个容器,其内容是l4的复制
插入、弹出、赋值
  list.push_front(0);   //头插
  list.push_back(6);    //尾插
  list.pop_front();     //头部删除
  list.pop_back();      //尾部删除
访问
  list.front();   //返回容器的第一个元素
  list.back();    //返回容器最后一个元素

front()back()函数同样可以用来给容器首尾赋值

  list.front()=1;   //将容器的第一个元素赋值为1
  list.back()=2;    //将容器最后一个元素赋值为2
迭代器

list不支持下标访问,且其迭代器不可以进行常量偏移(例如:it+5),但支持自增自减(例如it++)

list的迭代器为双向迭代器

成员函数 功能(list<int> v={1,2,3,4}
begin() 返回容器第一个元素的正向迭代器(指向v[0]
end() 返回容器最后一个元素之后一个位置的正向迭代器(指向v[4]
rbegin() 返回容器最后一个元素的反向迭代器(指向v[3]
rend() 返回容器第一个元素之前一个位置的反向迭代器(指向v[-1]