• C++学习---STL标准模板库


    1.STL简介---标准模板库

    三大主体(algorithm、containers、iterator)、六大组件(algorithm、containers、iterator、仿函数、适配器、空间配置器)、十三头文件

    容器(向量、链表、栈、队列、双向队列、集合、映射)--(头文件:vector、list、stack、queue、deque、set、map)

    算法(70)---(头文件:algorithm、numeric、functional)

    迭代器---(头文件:iterator、utility、memory)

    2.序列式容器

    序列式容器:容纳特定类型对象的集合,将单一类型元素聚集起来。根据位置来存储和访问这些元素。

    三种顺序容器:vector、list、duque

    2.1 vector容器

    //头文件
    #include<vector>
    
    //Vector对象的定义与初始化
    vector<int> ive1;
    vector<int> ive2(ive1);
    vector<int> ive3(10,-1);
    vector<int> ive4(10);
    
    //容器的构造函数与使用
    C<T >c;  //创建空容器
    C c(c2);   //拷贝容器
    C c(n, t); //创建n个值的容器
    C c(n);    //初始化n个元素的容器
    
    //vector性质:可以实现动态地高效添加元素
    
    //vector对象的操作
    v.empty();//返回vector是否为空
    v.size();   //返回vector大小(size_type)
    v.push_back(t);//从末尾添加元素t---可以用于添加元素
    v[n];        //下标操作,返回元素为n的元素---可以用于初始化,而不能用于添加元素
    v1=v2;    //将v1中的元素用v2替换
    v1==v2;   //判断两vector是否相等

    2.2使用迭代器

    //容器的iterator类型定义
    vector<int>:: iterator iter;
    
    //begin操作和end操作
    vector<int>:: iterator iter1 = vector.begin();//指向第一个元素
    vector<int>:: iterator iter2 = vector.end();//指向末尾后面一个元素
    
    //vector间接引用和迭代器的递增
    *iter;//为容器的间接引用,与ivec[]等效
    ++iter;//迭代器的递增,指向容器的后面元素
    
    //迭代器的其他操作
    “==”与“!=”用于判断两个迭代器是否指向同一个元素
    
    //迭代器的应用示例
    //用于循环
    for (vector<int>::iterator iter = ivec.begin(); iter!=ivec.end(); iter++)
      *iter = 0;

    2.3 list容器

    //头文件
    #include<list>
    
    //list的定义和初始化
    list<int> list1;
    list<int> list2(10);
    list<int> list3(10, 1);
    
    //遍历
    list<int>::iterator iter = mylist.begin();
    list<int>::iterator iter = mylist.end();
    
    //元素的插入
    c.insert(p ,t);//在迭代器p前面插入元素t
    c.insert(p ,n, t);//在迭代器p前面插入n个值为t的元素
    c.insert(p ,b, e);//在迭代器p前面插入由迭代器b和迭代器e标记的范围的元素
    
    //删除
    mylist.erase(tra);//删除mylist中的元素tra

    3.关联式容器

    map--(key, value);

    set(key);

    3.1 pair类型

    //头文件
    #include<unility>
    
    //Pair类型提供的操作
    pair<T1, T2>p1;//创建空的pair对象
    pair<T1, T2>p1(v1,v2);//创建pair对象,first对象初始化为v1,second对象初始化为v2
    make_pair<v1, v2>;//以v1和v2创建一个新的pair对象
    p.first;//返回first的数据成员
    p.second;//返回second的数据成员
    
    //pair的创建和初始化
    pair<string, string> anon;
    pair<string, int>word_count;
    pair<string, string> authors("xa", "ada");
    
    pair<string, string> next_aut;
    string first, last;
    while(ci>>first>>last)
    {
       next_aut.make_pair(first, last);
    }
    
    //pair对象的操作
    通过点操作符访问first与second对象

    3.2 map容器

    //头文件
    #include<map>
    
    //数据键值对Key_value
    
    //map对象的定义
    map<string, int> word_count;
    
    //map访问
    map<string, int> iterator iter = word_count.begin();
    iter->first;//访问key元素
    iter-second;//访问value元素
    
    //键成员不可修改、值成员可修改
    
    //map添加元素
    word_count["Ana"] = 1;//查找key Ana,无则添加
    
    //查找并读取map元素
    word_count.count(""abc);//计算key abc出现的次数
    word_count.find("abc");//查找key abc元素,返回指向的迭代器,无则返回end()

    3.3 set容器

    //头文件
    #include<set>
    
    //Set对象的定义
    set<int> myset;
    
    //set添加元素
    set.insert("abc");
    set.insert(ivec.begin(), ivec.end());
    
    //set容器读取元素
    set.count("121");
    set.find("ada");
    
    //位于头文件<algorithm>的交和并运算
    set_itersection(set1.begin(),set1.end(), set2.begin(),set2.end(), inserter(set3.begin(),set3.end()));
    set_union(set1.begin(),set1.end(), set2.begin(),set2.end(), inserter(set4.begin(),set4.end()));
  • 相关阅读:
    Solaris引导和关闭
    systemctl
    [Poj3281]Dining(最大流)
    [Poj1149]Pigs(最大流)
    [Bzoj2588]Count on a tree(主席树+LCA)
    [BZOJ3524]区间问题(主席树)
    [Poj2761]Feed the dogs(主席树)
    [BZOJ1597][Usaco2008 Mar]土地购买(斜率优化)
    [BSOJ2684]锯木厂选址(斜率优化)
    [Hdu3507]Print Article(斜率优化)
  • 原文地址:https://www.cnblogs.com/zouhq/p/10579798.html
Copyright © 2020-2023  润新知