zoukankan      html  css  js  c++  java
  • STL常用的容器

    vector:相当于一个不定长数组。


    vector的扩充机制是按照现在容量的一倍进行增长,每次增长是重新申请一块更大的心内存,并把现在容器中的元素逐个复制过去,然后销毁旧的内攒
    1.头文件:
    #include<vector>
    2.定义vector对象:
    vector<int> a; //创建一个空的容器
    vector<int> b(10,1);//创建一个初始10个元素,每个元素为1的数组
    vector<int> c(b.begin()+5,b.end());//选取从b的第五个元素开始到结束的元素创建一个新的容器
    vector<int> d(b);//创建一个和b一样的容器
    vector<int> e(10);//创建一个有10个元素的容器
    3.基本操作函数
    vector<int>::iterator it=b.begin();//创建一个vector<int>的迭代器
    c.begin();-------------------返回容器c的起始位置的迭代器
    c.end():---------------------返回容器c的最后位置的迭代器
    c.push_back(t);--------------向数组最后插入元素
    c.pop_back(t);---------------删除数组最后一个元素
    b.at(3);---------------------返回编号为3的数据
    b.front();-------------------返回数组的第一个元素的值
    b.back();--------------------返回数组的最后一个元素的值
    b.insert(it+i,t)-------------在第i+1个元素前插入一个元素
    b.assign(a.begin(),a.end())--将容器a的值赋值给容器b
    b.erase(b.begin()+5);--------删除第6个元素
    b.erase(it+1,it+4);----------删除第2个元素到第五个元素
    b.size();--------------------返回容器大小
    b.swap(d);-------------------将b和d交换数据
    b.clear();-------------------清空当前的vector


    set:就是数学上的集合——每个元素最多出现一次


    1.头文件
    #include <set>
    2.定义set对象:
    set<int> a;//创建一个空的set容器
    set<int> b(a.begin(),a.end());//创建一个从a.begin()到a.end()的容器,可以定义迭代器进行移动位置
    set<int> c(a);//创建一个和a一样的容器
    3.基本操作函数:b.assign(a.begin(),a.end())--将容器a的值赋值给容器b
    b.erase(b.begin()+5);--------删除第6个元素
    a.begin();-------------------返回开始的迭代器
    a.end();---------------------返回最后的迭代器
    a.insert(t);-----------------将元素t插入容器
    a.count(t);------------------判断a里有没有值为t的元素若存在返回1否则返回0
    a.empty();-------------------判断容器是否为空,如果为空返回1否则返回0
    a.size();--------------------返回容器内元素的个数
    a.erase(a.begin());----------删除首元素
    a.erase(a.begin(),a.end());--删除区间内元素
    a.erase(3);------------------删除值为3的元素
    a.find(3);-------------------返回值为3的迭代器
    a.swap(b);-------------------交换两个容器的值
    a.clear();-------------------清空当前set


    map:就是从键到值得映射,重载了[]运算符

    map像数组的“高级版”,例如:map<string,int> mouth_name; 可以用这样的方式复制mouth_name["July"]=7(如果没有July下标的实例会自动插入
    map和set很相似,map允许重复元素,并且map比set多一个键值
    1.头文件
    #include <map>
    2.定义map对象:
    max<int,string> a;
    3.常用函数
    a.begin();--------------------------------------返回开始的迭代器
    a.end();----------------------------------------返回最后的迭代器
    a.insert(pair<int,string>(123,"abcde"));--------插入下标为123值为abcde的元素
    a.begin()->first;-------------------------------定义max<int,string> a来说,表示map对象第一个元素的int型数据
    a.begin()->second;------------------------------定义max<int,string> a来说,表示map对象第二个元素的string型数据
    a.find(3)---------------------------------------返回下标为3的元素的迭代器,如果没有返回最后一个元素的迭代器
    a.count(2)--------------------------------------判断a里有没有下标为2的元素若存在返回1否则返回0
    a.erase(2)--------------------------------------删除键为2的元素
    a.erase(a.begin());-----------------------------删除第1个元素
    a.erase(a.begin(),a.end());---------------------删除区间内元素
    a.empty();--------------------------------------判断容器是否为空,如果为空返回1否则返回0
    a.size();---------------------------------------返回容器内元素个数
    a.swap(b);--------------------------------------交换两个容器的值
    a.clear();--------------------------------------清空当前map


    stack:栈


    1.头文件
    #include<stack>
    2.定义stack对象:
    stack<int> a;
    3.基本操作函数:
    int t;
    a.push(t);----------将t的值入栈,无返回值
    a.pop();------------出栈无返回值,无返回值
    a.empty();----------判断栈是否为空,如果为空返回1否则返回0
    a.top();------------返回栈顶元素
    a.size();-----------返回栈的元素数目

    queue:队列


    1.头文件
    #include<queue>
    2.定义queue对象:
    queue<int> a;
    3.基本操作函数:
    int t;
    a.push(t);----------将t入队,无返回值
    a.pop();------------删除第一个元素
    a.empty();----------判断队列是否为空,如果为空返回1否则返回0
    a.front();----------返回队列第一个元素
    a.back();-----------返回队列最后一个元素
    a.size();-----------返回队列长度

    list:双向链表


    1.头文件
    #include<list>
    2.定义list对象
    list<int> L0; // 空链表
    list<int> L1(9); // 建一个含个默认值是的元素的链表
    list<int> L2(5,1); // 建一个含5个元素的链表,值都是1
    list<int> L3(L2); // 建一个L2的copy链表
    list<int> L4(L0.begin(), L0.end());//建一个含L0一个区域的元素
    3.基本操作函数:
    L1.assign(4,3);----------------------分配4个元素,值为3
    L1.assign(L2.begin(),L2.end());------分配区间的分配值
    L1.begin();--------------------------返回第一个元素的迭代器
    L1.end();----------------------------返回最后一个元素的下一个元素的迭代器
    L1.push_back(4);---------------------插入一个元素到链表尾
    L1.push_front(4);--------------------插入一个元素到链表头
    L1.pop_back();-----------------------删除最后一个元素
    L1.pop_front();----------------------删除第一个元素
    L1.erase(L1.begin());----------------删除迭代器指向的元素
    L1.erase(L1.begin(),L1.end());-------删除区间元素
    L1.remove(3);------------------------删除链表中值为3的全部元素
    L1.size();---------------------------返回链表的值
    L1.reverse();------------------------反转链表
    L1.sort();---------------------------将链表的值升序排列
    L1.sort(greater<int>());-------------降序排列
    L1.swap(L2);-------------------------L1和L2的值互换
    L1.unique();-------------------------删除相邻重复元素
    L1.clear();--------------------------清空链表

  • 相关阅读:
    模拟测试20190815(已更新)
    [JLOI2015]管道连接
    [BJWC2018]最长上升子序列
    [CQOI2012]局部极小值
    [HNOI2010]Bus 公交线路
    [BZOJ4903/CTSC2017]吉夫特
    [BZOJ3717/PA2014]Pakowanie
    [NOI2015]寿司晚宴
    [BZOJ4145/AMPPZ2014]The Prices
    [Usaco2013 Nov]No Change
  • 原文地址:https://www.cnblogs.com/asuml/p/5746781.html
Copyright © 2011-2022 走看看