C++标准模板库【Standard Template Library , STL】
1.vector的常见用法

vector常用函数
    vector<int> v;
    vector<typename>::iterator it;//vector可通过下标、迭代器(类似于指针)来访问
    v.push_back(x);  //新增一个元素x到vector末尾
    v.pop_back();    //取出vector末尾的元素
    int cnt = size();   //vector中的元素个数
    v.clear();    //清空vector
    v.insert(*it,x);   //将x插入到*it处
    v.erase(*it);    //删除*it单个元素
    v.erase(*left,*right);
    //删除[left,right)这个区间中的元素

例题:射击问题

2.set的常见用法
set【集合】内部自动有序且不含重复元素的容器

set常用函数
    set<int> s;
    set<typename>::iterator it;//set只能通过迭代器来访问
    s.insert();  //将x插入到set容器,并自动递增排序和去重
    s.size();  //获得元素个数
    s.find(value);  //返回set中对应值为value的迭代器
    s.erase();  //删除单个元素、一个区间内的所有元素
    s.clear();    //清空set
    set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),back_intersection);       //求交集

set的其他函数习题:集合运算

3.string的常见用法

    string str = "123";
    int a1 = stoi(str);   //string型直接转成int型
    int a2 = atoi(str.c_str());  //先把str转换成char*,转换成int*
    str1 += str2;  //将str2直接拼接到str1上
    == 、 != 、< 、<= 、> 、>=  比较大小,规则字典序
    str.length()  //返回长度
    str.size()  //返回长度
    str.substr(pos,len)  //返回从pos位未开始、长度位len的子串

例题:输出指定长度的字符串

4.map的常见用法

map<string,int> m;  //根据姓名查询分数
    //fisrt为key,second为value
    m.size();
    m.erase(); 
    m.find();
    m.clear();
    //按照下标输出,根据first来查找second
    //按照迭代器访问
    map<string,int>::iterator it;
    for(it = m.begin();it != m.end(); it++)
    {
        cout << it->first << " " << it->second << endl;
    }
    //for-each输出
    for(auto i : m)
    {
        cout << i.first << " " << i.second << endl;
    }

例题:第二题:统计同成绩学生

5.queue的常见用法 --- 广度优先搜索
queue【队列】 先进先出

    //queue<typename> q;   typename:任意基本数据类型或容器
    queue<int> q;
    int x = 6;
    q.push(x);   //将x推入queue的队尾中
    q.pop();     //(无返回值)取出队首元素
    q.front();   //获取队首元素
    q.back();   //获取队尾元素
    q.empty();  //判断队列是否为空
    //在front()和pop()前必须用empty()判断队列是否为空,否则可能因为队空而出现错误
    //queue里没有clear(),必须得手动清空
    while(!q.empty())
    {
        q.pop();
    }
    q.size();  //返回queue内元素的个数

经典例题:约瑟夫环

6.priority_queue的常见用法
priority_queue【优先队列】
队首元素一定是当前队列中优先级最高的那一个

 priority_queue<int> pq;   //默认降序排列(大的在队首)
    priority_queue<int,vector<int>,greater<int>()> pq2;   //升序的优先队列
    int x;
    pq.push(x);    //将x推入优先队列
    //priority_queue不像queue一样有front(),back()
    //使用top()前必须用empty()判断优先队列是否为空
    pq.top();     //只能通过top()来访问队首元素
    pq.pop();     //将队首元素取出
    pq.empty();
    pq.size();

经典例题:Huffman树

7.stack的常见用法
stack【栈】 后进先出

stack<int> st;    //栈,先进后出
    st.size();
    int x = 6;
    st.push(x);   //将x放入栈顶
    st.pop();
    st.top();
    st.empty();

例题:说反话

8.pair的常见用法
pair:想将两个元素绑在一起作为一个合成元素、又不想因此定义结构体,就可用pair

struct pair{
    typename first;
    typename second;
};
等价于:pair<typeName1,typeName2> name;
    p.first  //pair中的元素访问
    可用 == 、 != 、< 、<= 、> 、>= 比较大小,先以first的大小为标准,只用当first相等时才去判别second的大小