ACM与STL结合 的简要笔记

主要来源于读《ACM程序设计》《c++标准程序库》时所做的笔记,和前一篇综合下基本ACM的基础就解决了
1.常用不易被注意的命令
        windows                        linux

        tasklist                ps
        taskkill /pis <>        kill <>
        直接运行                ./
        acs<abd.in>abc.out        ./abc<abc.in>abc.out        //相当有用
        echo 10|foo|bar                echo 10|foo|bar
        type abc.txt|more        cat abc.txt|more        //只有显示功能

2.vector<T> v
        push_back()的效率远远高于insert erase push_front
        sort(v.begin(),v.end());可以使用迭代器vector<T>::iterator,后面可以加上可省略的比较函数
        reserse(v.begin(),v.end());
3.string
        string s;
        c++的string满足STL
        s.replace(3,3,"ssss");
        s.find("key")
        reverse(s.begin(),s.end());       
        vector<string> //做个string数组
        sscanf sprintf
                sscanf(s,&int,&double);
                sprintf(s,int,double);
        ostringstream istringstream
                ostringstream o;   o<<int;  s=o.str();
                istringstream i(s); i>>int;
4.set//集合,主要是实现了红黑树的平衡二叉树
        set<int> s;
        注意,不要随便修改值,已修改就变位置,迭代器就不好用了  
        insert();
        set<int>reverse_iterator rit;
        for(rit=s.rbegin();rit!=s.reand();++rit){        }
        erase();参数可以是 元素值 也可以是 迭代器
        find(key);
        set有可能需要自己写比较函数 set<int,cmp> s;
                结构体或者类        可以直接把比较写在里面
                        class A{int a; int oprator <(const A& b){return a-b.a;}}
5.multiset//可以有重复元素的集合
        基本和set一致
        erase() 如果参数是 迭代器 则删除这个元素。如果参数是元素值,则删除所有这个值的元素
6.map
        map<stirng,int> map;//可以添加第三个参数,设置比较函数,也可以在类中设置比较函数
        m["Tom"]=2;
        m["Jack"]=17;
        m.erase("Tom");
        可以方便用于 取余
7.multimap
        基本和map一致
        erase() 如果参数是 迭代器 则删除这个元素。如果参数是元素值,则删除所有这个值的元素
8.deque//分段数组
        类似于vector,但是指针较麻烦,要智能指针,好处是向前向后插元素较快
9.list//双链表
        push_front push_back insert remove pop_front pop_back erase()删除指定点 find()没找到的话返回end
        l.uique()可以提出连续的重复元素,只保留一个
10.bitset
        bitset<10000> b;
        b.any() //返回是否存在1
        b.none()//返回是否没有1
        b.count()//返回1的个数
        b.size()
        b[pos]
        b.set(pos)//把指定位设成1
        b.set()//把所有位设成1
        b.reset(pos)//把指定位设成0
        b.reset()//把所有位设成0
        b.flip(pos)//指定位取反
        b.flip()//所有位取反
        b.to_ulong()
        cout<<b;
11.stack
        push() top() pop()
12.queue
        front()//返回队首 back() push()//插入队尾 pop()//消灭队首
13.priority_queue
        priority_queue<int> pq //优先队列,可以定义cmp或者类的<
        push top pop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值