C++ STL常用函数总结

一些总结,有错误欢迎指正!!!

1 vector

#include 
#include 
#include 
#include 
#include 

using namespace std;

int main ()
{
    //vector
    vector<int> a;
    a.size(); 
    a.empty();
    a.clear();
    a.front();
    a.back();
    a.push_back();
    a.pop_back();
    a.begin(), a.end();
    //[]支持随机寻址,类似数组
    //遍历方式:3种
    
    for(int i = 0; i < a.size(); i ++ )
    for(vector<int>::iterator i = a.begin(); i != a.end(); i ++ )
    //vector::iterator 可以写成auto
    for(auto x : a)
    
    //支持比较运算,按照字典序
    
    return 0;
}

2 pair

#include 
#include 
#include 
#include 
#include 

using namespace std;

int main ()
{
    //pair 好处是相当于帮我们实现了一个结构体,并且自带一个比较函数
    pair<int, string> p;
    p.first();
    p.sceond();
    //支持比较运算,
    p = make_pair(10, "aaa");
    p = {20, "abc"};
    //也可以存3个东西
    pair<int, pair<int, int>> pp;
    return 0;
}

3 string

#include 
#include 
#include 
#include 
#include 

using namespace std;

int main ()
{
    //string
    string s = "aaa";
    s.size(); 
    s.length();//功能和size一样
    s.empty();
    s.clear();
    //支持直接加的操作
    s += "bbb";
    a.substr(1, 2);//两个参数,1是开始取子串的下标,2是子串的长度。
                   //如果第二个参数超过了剩余部分的长度,就会到串的最后停止。
                   //也可以不给参数,默认直接取到最后
    //如果用printf输出时:需要注意,可以用s.c_str()取到s存储字符串的起始地址
    printf("%s", s.c_str());
    
    return 0;
}

4 queue

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

int main ()
{
    //queue  先进先出
    queue<int> q;
    q.size();
    q.empty(); 
    // 注意没有clear 函数
    q = queue<int>(); //想要清空一个队列可以重新构造一个
    q.push(); //向队尾插入一个元素
    q.front(); //返回队头元素
    q.back();  //返回队尾元素
    q.pop();   //弹出队头元素
    
    return 0;
}

5 priority_queue

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

int main ()
{
    //priority_queue 默认大根 ,别忘记这个需要include queue
    //实现小根//(1)插入的时候插入-x;
              //(2)priority_queue, greater> heap;
    priority_queue<int> heap;
    heap.push();//插入一个元素
    heap.top(); //返回堆顶元素
    heap.pop(); //弹出堆顶元素
    
    return 0;
}

6 stack

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

int main ()
{
    //stack
    stack<int> stk;
    stk.size();
    stk.empty();
    stk.push();
    stk.top();
    stk.pop();
    
    return 0;
}

7 deque

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

int main ()
{
    //deque 双端队列,相当于加强版的vector
    deque<int> q;
    q.size();
    q.empty();
    q.clear();
    q.front();
    q.back();
    q.push_back();//队尾插入
    q.pop_back();//队尾弹出
    q.push_front();//队头插入
    q.pop_front;//队头弹出
    //也支持[]随机寻址
    q.begin(); //支持迭代器
    q.end();
    
    
    return 0;
}

8 set、map、multiset、multimap

#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

int main ()
{
    //动态维护有序序列
    
    //(1)set & multiset :size(), empty(), clear() 时间复杂度O(logn)
    //begin(), end() ++ -- 返回前驱和后继 时间复杂度O(logn)
    
    set<int> S; //不能有重复元素,插入一个重复元素会被忽略,以下函数时间复杂度基本都是logn
    multiset<int> MS;
    S.insert();//插入一个数
    S.find();  //查找一个数, 不存在返回end()
    S.count(); //返回一个数的个数,set只返回0或者1
    S.erase(); //(1)输入是一个数x,删除所有x(multiset会把所有的x都删掉)O(k + logn)
               //(2)输入一个迭代器,删除这个迭代器(只会删一个迭代器)
    lower_bound(x); //返回的是: 大于等于x的最小的数的迭代器,如果不存的话返回end()
    upper_bound(x); //返回的是: 大于    x的最小的数的迭代器
    
    
    //(2)map & multimap :size(), empty(), clear(), begin(), end() ++ -- 返回前驱和后继
    map<string, int> M;
    M["aaa"] = 1; //将aaa映射到1
    multimap<int> MM;
    S.insert(); //一个映射,插入的数是一个pair
    S.erase();  //出入参数是一个pair或者迭代器
    S.find();
    //[] 像用数组那样用,但是时间复杂度是O(logn)
    lower_bound();
    upper_bound();
    
    
    
    return 0;
}

9 unordered_set、unordered_map、unordered_multiset、unordered_multimap

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

int main ()
{
    //和set、map、multiset、multimap用法类似,但是增删改查时间复杂度是O(1)
    //不支持 lower_bound() 和 upper_bound(), 以及迭代器的 ++ --
    unordered_set<string, int> a;
    unordered_map<string, int> b;
    unordered_multiset<string, int> c;
    unordered_multimap<string, int> d;
    
    
    return 0;
}

10 bitset

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

int main ()
{
    //bitset 可以省8倍空间
    bitset<10000> S;
    //支持所有位运算操作
    /*
    ~s, &, |, ^
    >>, <<
    ==, !=
    []
    */
    count(); //返回有多少个1
    any(); //判断是否至少有一个1
    none();//判断是否全为0
    
    set();//把所有位置设置成1
    set(k, v); //将第k位变成v
    reset(); //把所有位变成0
    flip(); //取反,等价于~
    flip(k);//把第k位取反
    
    return 0;
}

你可能感兴趣的:(算法笔记,c++,算法)