美文网首页
STL核心编程

STL核心编程

作者: 加班猿 | 来源:发表于2021-12-18 13:01 被阅读0次

    title: STL核心编程

    categories: [C++]

    tags: [编程语言]

    date: 2021/03/13

    <div align = 'right'>作者:hackett</div>

    <div align = 'right'>微信公众号:加班猿</div>


    在这里插入图片描述

    容器

    序列式容器

    string容器

            类内部封装了char *,管理这个字符串,是一个char *型的容器
    
    构造函数
    string();
    string(const char *s);
    string(const string& str);
    string(int n , char c);
    
    赋值操作
    string& operator=(const char* s);
    string& operator=(const string &s);
    string& operator=(char c);
    string& assign(const char* s);
    string& assign(const char *s , int n);
    string& assign(const string& s);
    string& assign(int n , char c);
    
    字符串拼接
    string& operator+=(const char* str);
    string& operator+=(const char c);
    string& operator+=(const string& str);
    string& append(const char *s);
    string& append(const char *s, int n);
    string& append(const string &s);
    string& append(const string &s, int pos, int n)
    
    查找和替换
    int find(const string& str, int pos = 0) const;
    int find(const char* s, int pos = 0) const;
    int find(const char* s, int pos, int n) const;
    int find(const char c, int pos = 0) const;
    int rfind(const string& str, int pos = npos) const;
    int rfind(const char* s, int pos = npos) const;
    int rfind(const char* s, int pos, int n) const;
    int rfind(const char c, int pos = 0) const;
    string& replace(int pos, int n, const string& str);
    string& replace(int pos, int n,const char* s); 
    
    字符串比较
    int compare(const string &s) const;
    int compare(const char *s) const;
    
    字符存取
    char& operator[](int n);
    char& at(int n); 
    
    插入和删除
    string& insert(int pos, const char* s);  
    string& insert(int pos, const string& str);
    string& insert(int pos, int n, char c);
    string& erase(int pos, int n = npos);
    
    子串
    string substr(int pos = 0, int n = npos) const;
    

    vector容器

            区别于数组,数组是静态空间,vector可以动态扩展
    
    构造函数
    vector<T> v;
    vector(v.begin() , v.end());
    vector(n , elem);
    vector(const vector &vec);
    
    赋值操作
    vector & operator = (const vector & vec);
    assign(beg , end);
    assign(n , elem);
    
    容量和大小
    empty();
    capacity();
    size();
    resize(int num);
    resize(int num , elem);
    
    插入和删除
    push_back(elem);
    pop_back();
    insert(const_iterator pos , elem);
    insert(const_iterator pos , int count , elem);
    erase(const_iterator pos);
    erase(const_iterator start , const_iterator end);
    clear();
    
    数据存取
    at(int index);
    operator[];
    front();
    back();
    
    互换容器
    swap(vec);
    
    预留空间
    reserve(int len);
    

    deque容器

            双端数组,内部有个中控器,维护每段缓冲区中的内容
    
    构造函数
    deque<T> deqT;
    deque(beg , end);
    deque(n , elem);
    deque(const deque & deq);
    
    赋值操作
    deque & operator = (const deque &deq);
    assign(beg , end);
    assign(n , elem);
    
    大小
    empty();
    size();
    resize(num);
    resize(num , elem);
    
    插入和删除
    push_back(elem);
    push_front(elem);
    pop_back();
    pop_front();
    insert(pos , elem);
    insert(pos , n , elem);
    insert(pos , beg , end);
    clear();
    erase(beg , end);
    erase(pos);
    
    数据存取
    at(int index);
    operator[];
    front();
    back();
    
    排序
    sort(iterator beg , iterator end);
    

    stack容器

            先进后出,不允许有遍历
    
    构造函数
    stack<T> stk;
    stack(const stack & stk);
    
    赋值操作
    stack & operator=(const stack &stk);
    
    数据存取
    push(elem);
    pop();
    top();
    
    大小操作
    empty();
    size();
    

    queue容器

            先进先出,不允许遍历
    
    构造函数
    queue<T> que;
    queue(const queue &que);
    
    赋值操作
    queue& operator = (const queue &que);
    
    数据存取
    push(elem);
    pop();
    back();
    front();
    
    大小操作
    empty();
    size();
    

    list

            链表结构,属于双向迭代器
    
    构造函数
    list<T> lst;
    list(beg , end);
    list(n elem);
    list(const list *lst);
    
    赋值和交换
    assign(beg , end);
    assign(n , elem);
    list &operator = (const list &lsg);
    swap(lst);
    
    大小操作
    empty();
    size();
    resize(num);
    resize(num , elem);
    
    插入和删除
    push_back(elem);
    pop_back();
    push_front(elem);
    pop_front();
    insert(pos , elem);
    insert(pos , n , elem);
    insert(pos , beg , end);
    clear();
    erase(beg , end);
    erase(pos);
    remove(elem);
    
    数据存取
    front();
    back();
    
    反转和排序
    reserve();
    sort();
    

    关联式容器

    set/multiset

            所有元素都会在插入时自动被排序
    
    构造函数
    set<T> st;
    set(const set &st);
    
    赋值
    set& operator = (const set &st);
    
    大小和交换
    empty();
    size();
    swap(st);
    
    插入和删除
    insert(elem);
    clear();
    erase(pos);
    erase(beg , end);
    erase(elem);
    
    查找和统计
    find(key);
    count(key);
    
    区别
        set不允许容器有重复元素
                multiset允许容器有重复元素
    

    map/multimap

            所有元素都是pair,根据键值自动排序
    
    构造函数
    map<T1 , T2> mp;
    map(const map &mp);
    
    赋值
    map& operator = (const map &mp);
    
    大小和交换
    empty();
    size();
    swap(mp);
    
    插入和删除
    insert(elem);
    clear();
    erase(pos);
    erase(beg , end);
    erase(key);
    
    查找和统计
    find(key);
    count(key);
    

    pair

            成对出现的数据,利用对组可以返回两个数据
    
    创建方式
    pair<type , type> p(value1 , value2);
    pair<type , type> p = make_pair(value1 , value2);
    

    常用算法

    遍历

    for_each(iterator beg , iterator end , _func);
    //实现遍历容器
    transform(iterator beg1 , iterator end1 , iterator beg2 , _func);
    //搬运容器到另一个容器中
    

    查找

    find(iterator beg, iterator end, value);
    //查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()
    find_if(iterator beg, iterator end, _Pred);
    //按条件查找元素
    adjacent_find(iterator beg, iterator end);
    //查找相邻重复元素
    bool binary_search(iterator beg, iterator end, value);
    //查找指定元素是否存在
    count(iterator beg, iterator end, value);
    //统计元素个数
    count_if(iterator beg, iterator end, _Pred);
    //按条件统计元素个数
    

    排序

    sort(iterator beg, iterator end, _Pred);
    //对容器内元素进行排序
    random_shuffle(iterator beg, iterator end);
    //洗牌   指定范围内的元素随机调整次序
    merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
    //两个容器元素合并,并存储到另一容器中
    reverse(iterator beg, iterator end);
    //将容器内元素进行反转
    

    拷贝和替换

    copy(iterator beg, iterator end, iterator dest);
    //容器内指定范围的元素拷贝到另一容器中
    replace(iterator beg, iterator end, oldvalue, newvalue);
    //将容器内指定范围的旧元素修改为新元素
    replace_if(iterator beg, iterator end, _pred, newvalue);
    //将区间内满足条件的元素,替换成指定元素
    swap(container c1, container c2);
    //互换两个容器的元素
    

    算术生成算法

    accumulate(iterator beg, iterator end, value);
    //计算区间内 容器元素累计总和
    fill(iterator beg, iterator end, value);
    //向容器中填充指定的元素
    

    集合算法

    set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
    //求两个容器的交集
    set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);  
    //求两个集合的并集
    set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
    //求两个集合的差集
    

    如果你觉得文章还不错,记得"点赞关注"

    关注我的微信公众号【 加班猿 】可以获取更多内容

    相关文章

      网友评论

          本文标题:STL核心编程

          本文链接:https://www.haomeiwen.com/subject/hdhhfrtx.html