• c++ std


    高中只是听说过stl,每次问老师老师都会说“有毒,千万别学”,于是stl有毒的言论深深的印在我脑海,看到就恐惧,于是一直没有学,但是大学后确实很多用到stl的地方必须去学习了。

    现在想想老师当年的说法是可以理解的,相传stl速度上有所欠缺(与自己手写的数据结构作比较),毕竟OI的赛制比拼的不是时间,而是效率,同样的策略,使用stl可能就比使用自己写的数据结构少过一个测试点,一个测试点有多重要我是最清楚的2333往事不堪回首。

    但是ACM不太一样,时间变得十分的宝贵,简单的题目直接上stl可能三分钟写完,自己手写要半个点,人与人就拉开差距了,难题一般都需要对高级数据结构进行定制,stl大家都用不上,不用太担心效率的问题。

    下面进入正题

    =======================

    vector   是类似数组的存在,不过他是动态数组,在不确定数据量大小的时候十分好用

    初始化

    vector<int> nums;

    vector<int> mynums(nums);

    vector<int> rows(m,0);

    vector<vector<char>> picture; //二维

    int x=mynums.size();

    插入&取出

    nums.push_back(1);

    int x=nums.pop_back();

    遍历

    for(int i=0;i<num.size();i++)

      nums[i];

    for(vector<int>::iterator it=nums.begin();it!=nums.end();it++)

      cout<<*it;

    ===============================

    unordered_map   是一个hash实现的映射(可以携带辅助数据)

    ===============================

    unordered_set   是一个hash实现的数据存储器,快速判断数据存在性

    ===============================

    set   是红黑树,logn的查找插入删除
    默认的是左小右大,所以呢.begin是最小值,.rbegin是最大值

    初始化
    set<int> s;

    插入&删除
    s.insert(5);//会返回一个pair,first是迭代器,second是bool表示是否成功
    s.erase(2);
    s.clear();

    遍历(中序遍历)
    类似于vector
    还可以反向遍历,用reverse_iterator

    查找(返回迭代器,如果没找到,返回s.end())
    it=s.find(5);
    x=*it

    摘自别人的博客,还没有测试,不理解为什么自定义比较规则要重载一对小括号。。。
    http://blog.csdn.net/wangran51/article/details/8836160

    6.自定义比较函数
        (1)元素不是结构体:
            例:
            //自定义比较函数myComp,重载“()”操作符
            struct myComp
            {
                bool operator()(const your_type &a,const your_type &b)
                [
                    return a.data-b.data>0;
                }
            }
            set<int,myComp>s;
            ......
            set<int,myComp>::iterator it;
        (2)如果元素是结构体,可以直接将比较函数写在结构体内。
            例:
            struct Info
            {
                string name;
                float score;
                //重载“<”操作符,自定义排序规则
                bool operator < (const Info &a) const
                {
                    //按score从大到小排列
                    return a.score<score;
                }
            }
            set<Info> s;
            ......
            set<Info>::iterator it;

    ===============================

    map   是二叉树,带有映射关系

    ===============================

  • 相关阅读:
    声律启蒙(上 下卷,珍藏版)
    笠翁对韵(全卷,珍藏版附注释)
    Oracle 中 nvl、nvl2、nullif、coalesce、decode 函数的用法详解
    Groovy
    spring各版本jar包和源码
    Java 调用翻译软件实现英文文档翻译
    oracle导出序列的几种办法
    Oracle数据库内存使用情况分析查看
    window Maven私服搭建——nexus
    用户管理的备份与恢复
  • 原文地址:https://www.cnblogs.com/xuwangzihao/p/6501593.html
Copyright © 2020-2023  润新知