zoukankan      html  css  js  c++  java
  • C++学会STL

    1.1 泛型程序设计简介

      泛型程序设计,简单地说就是使用模板的程序设计法。将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现数据结构,重新编写算法。

      总而言之,不多赘述,有了STL,不必再从头写大多的标准数据结构和算法,并且可获得非常高的性能。

    1.2迭代器

    • 可遍历STL容器内全部或部分元素的对象
    • 指出容器中的一个特定位置
    • 所有容器都提供获得迭代器的函数
    操作 效果
    begin() 返回一个迭代器,指向第一个元素
    end() 返回一个迭代器,指向最后一个元素之后
     
      半开区间[beg, end)的好处:
      1.为遍历元素时循环的结束时机提供了简单的判断依据(只要未到达end(),循环就可以继续)
      2.不必对空区间采取特殊处理(空区间的begin()就等于end())
    2.常见的STL容器及其例题应用
    2.1Sort
    头文件: <algorithm>
    格式:
    sort(vect.begin(), vect.end());
    sort(vect.begin(), vect.end(), less<int>() );
    第三个参数可以自定义,主要用于自定义类型的排序
    2.2Vector
    2.2.1用法:
    vector<类型> 名字; 
    例如 vector<int> ve; vector<string> ve;
    自己定义的结构体什么的也可以往里塞
    struct POINT
    {
        int x, y;
    };
    vector<POINT> ve;

    2.2.2基本操作
    ve.push_back(const value_type &val); 
    作用是在数组后面增加一个元素。括号里填的是ve里装的东西
    ve.clear();清空ve里的所有元素。
    ve.empty();判断ve是否为空,如果是返回true,否则false
    ve.size();返回ve的长度。注意这里返回的类型是unsigned int,如果ve是空的ve.size() - 1就会爆掉。使用的时候一定要小心(做TC的时候被坑了一次)
    ve.pop_back() 删除数组里的最后一个元素。
    2.3 Set
    2.3.1用法:
    set<类型> 名字; 
    例如 set<int> se; set<string> se;
    自己定义的结构体什么的也可以往里塞
    struct POINT
    {
        int x, y;
    };
    set<POINT> se;

    2.3.2基本操作对集合a中元素的有
    插入元素:a.insert(1);
    删除元素(如果存在):a.erase(1);
    判断元素是否属于集合:if (a.find(1) != a.end()) ...
    返回集合元素的个数:a.size()
    将集合清为空集:a.clear()
     
    2.4 Map
    2.4.1用法:
    map添加数据;
    map<int ,string> maplive;  //第一个是键值,第二个是值
    1.maplive.insert(pair<int,string>(102,"aclive"));
    2. maplive[112]="April";//map中最简单最常用的插入添加!
    map中查找数据:
    第一种:用count 函数来判定关键字是否出现,其缺点是无法定位数据出现位置,
    由于map 的特性,一对一的映射关系,就决定了count 函数的返回值只有两个,
    要么是0,要么是1,出现的情况,当然是返回1 了
    第二种:用find 函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map 中没有要查找的数据,它返回的迭代器等于end 函数返回的迭代器
    注意:
    Map中的元素是自动按key升序排序,所以不能对map用sort函数
    但可以用迭代器按序遍历(与set类似)
    2.5 Queue
    2.5.1
    用法
    和vector一样。
    queue<int> qu; 
    queue<POINT> qu;
    我一般都用它在BFS的时候存点。

    2.5.2 常用操作
    qu.push(const value_type &val); 元素入队
    qu.pop()元素出队
    qu.front() 获得队首元素
    qu.empty() 判断qu是否为空,是的话返回true
    qu.size() 获得qu的大小。
    2.6 priority_queue(优先队列):默认从大到小排列。
     
    2.6.1用法
    priority_queue<int> pqu;
    如果要装结构体的话,要重载结构体的小于号,或者自己写一个cmp函数。
    struct cmp
    {
    operator bool ()(int x, int y)
    {
    return x > y; // x小的优先级高
         }
    };
    priority_queue<int, vector<int>, cmp>q;//第二个参数为容器类型。第三个参数为比较函数。
    priority_queue<vector<int>, less<int>> pq1; // 使用递减less<int>函数对象排序
    priority_queue<deque<int>, greater<int>> pq2; // 使用递增greater<int>函数对象排序
    常用操作
    push(),top(),pop(),empty();
    2.7 next_permutation(全排列):要包含头文件<algorithm>
    2.7.1用法
    与之完全相反的函数还有prev_permutation
    a[0]=1;a[1]=2;a[2]=3;
    do{cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;}while (next_permutation(a,a+3)); 
    输出:
     1 2 3
     1 3 2
     2 1 3
     2 3 1
     3 1 2
     3 2 1
    如果改成 while(next_permutation(a,a+2));
    则输出:
     1 2 3
     2 1 3
    只对前两个元素进行字典排序
  • 相关阅读:
    财务报表分析(张新民教授)-第七章 企业财务质量分析
    财务报表分析(张新民教授)-第七章 企业财务质量分析
    财务报表分析(张新民教授)-第七章 企业财务质量分析
    财务报表分析(张新民教授)-第七章 企业财务质量分析
    财务报表分析(张新民教授)-第七章 企业财务质量分析
    财务报表分析(张新民教授)-第七章 企业财务质量分析
    PS
    史上最强视频网站真实地址解析
    jsonp详解
    width:100%缩小窗口时背景图片出现空白bug
  • 原文地址:https://www.cnblogs.com/jjzzx/p/5391366.html
Copyright © 2011-2022 走看看