zoukankan      html  css  js  c++  java
  • 《STL详解》读书笔记

    vector 向量容器
    v.insert(v.begin(), num);//增加
    v.erase(v.begin(), v.end()); //擦除
    v.erase(v.begin());
    reverse(v.begin(), v.end()); //反向排序(从大到小)
    sort(v.begin(), v.end(), comp);
    -----------------------------------------------------------
    string
    string::iterator it = s.begin();
    s.insert(it, c);
    s.replace(pos, pos, c);
    s.find(c);
    reverse(s.begin(), s.end());
    char str[10]'
    sscanf("bad", "%s", str);
    -----------------------------------------------------------
    set 集合容器
    红黑树:左根右(不允许重复的键值)
    set<int> s;
    s.insert(num);
    set<int>::iterator it;
    中序遍历
    for(it = s.begin();it != s.end();++it)
        cout << *it << " ";
    反向遍历
    set<int>::reverse_iterator rit;
    for(rit = s.rbegin();rit != s.rend();++rit)
        cout << *rit << " ";
    找到就返回该键值的迭代器位置,否则返回end()
    it = s.find(num);
    自定义比较函数,要求按键值由大到小的顺序
    1、元素不是结构体
    struct myComp
    {
        bool operator()(const int &a, const int &b)
        {
            return a > b;
        }
    };
    set<int, myComp>::iterator it;
    for(it = s.begin();it != s.end();++it)
        cout << *it << " ";
    2、元素是结构体,把比较函数写在结构体内
    struct Info
    {
        string name;
        float score;
        //重载' < '操作符,自定义排序规则
        bool operator < (const Info &a) const
        {
            return a.score < score;
        }
    };
    set<Info>::iterator it;
    for(it = s.begin();it != s.end();++it)
        cout << (*it).name << ":" << (*it).score << endl;
    ---------------------------------------------------------------
    multiset 多重集合容器
    删除值为c的所有重复元素,返回删除元素总数
    ms.erase(c);
    返回第一个元素重复元素的迭代器位置,没有就返回end()迭代器位置
    ms.find(c);
    ---------------------------------------------------------------
    map 映照容器
    红黑树,键值不重复,比较函数只比较键值
    键值重复输入会被覆盖
    使用与set集合容器类似
    map<int, char>::iterator it;
    map<int, char> m;
    cout << m.first << m.second << endl;
    struct myComp
    {
        bool operator ()(const int &a, const int &b)
        {
            if(a != b)
                return a > b;
            else
                return a > b;
        }
    };
    map<int, char, myComp> m;
    m[1] = 'a';
    struct Info
    {
        string name;
        float score;
        bool operator < (const Info & a) const
        {
            return a.score < score;
        }
    };
    map<Info, int>::iterator it;
    应用:
    用 map 实现数字分离
    for(int j = 0;j < 10;++j)
        m['0' + j] = j;
    数字映照字符
    for(int j = 0;j < 10;++j)
        m[j] = '0' + j;
    --------------------------------------------------------------
    multimap 多重映照容器
    插入元素需要使用 insert()
    pair()将两个数据组合成一个数据, map 中将 key 和 value 放在一起来保存
    m.insert(pair<string, double>("Jack", 306));
    删除键值为 "Jack" 的元素
    m.erase("Jack");
    查找元素
    m.find("Jack");
    ------------------------------------------------------------------
    deque 双端队列容器
    deque 采用分块的线性存储结构存储数据,所有 deque 块用一个 map 块进行管理
    以数组方式输出元素
    d.pop_front();
    d.pop_back();
    ------------------------------------------------------------------
    list 双向链表容器
    迭代器只能用“++”或“--”的操作移动
    插入新元素时,链表自动扩张
    l.push_back();
    l.push_front();
    删除所有等于 1 的元素
    l.remove(1);
    l.pop_front();
    l.pop_back();
    l.erase();
    l.find(l.begin(), l.end(), 5);
    排序
    l.sort();
    剔除连续重复元素
    l.unique();
    -----------------------------------------------------------------
    bitset 位集合容器
    bitset 对象的大小一旦定义,就不能修改了
    bitset<10> b;
    将所有元素设为1
    b.set();
    b.set(pos, 1);
    将 pos 位设置为 0
    b.reset(pos);
    直接向输出流输出所有元素
    -----------------------------------------------------------------
    stack 堆栈容器
    s.push();
    s.top();
    s.pop();
    s.size();
    s.empty();
    -----------------------------------------------------------------
    queue 队列容器
    queue<int> q;
    q.push();
    q.size();
    q.front();
    q.back();
    q.empty();
    q.front();//队首
    q.back();//队尾
    -----------------------------------------------------------------
    priority_queue 优先队列容器
    队列中最大元素总是位于队首
    可以重载 "<" 操作符重新定义比较规则
    priority_queue<int> pq;
    pq.push(1);
    pq.size();
    pq.empty();
    pq.top();
    pq.pop();
    结构体重载 "<" 操作符
    struct Info
    {
        string name;
        float score;
        bool operator < (const Info &a) const
        {
            return a.score < score;
        }
    };
    从小到大排
    struct myComp
    {
        bool operator ()(const int &a, const int &b)
        {
            return a > b;
        }
    };
    priority_queue<int, vector<int>, myComp> pq;
    现在所有的不幸都是以前不努力造成的。。。
  • 相关阅读:
    网络数据处理
    进程间通信和网络
    附加的操作系统服务
    通用操作系统服务
    UIScrollView 子控件的自动布局经验
    UIImage 添加水印
    数据类型
    ios 获取手机的IP地址
    UILAbel 设置了attributedText 后省略号不显示
    swift
  • 原文地址:https://www.cnblogs.com/shuizhidao/p/9271705.html
Copyright © 2011-2022 走看看