zoukankan      html  css  js  c++  java
  • C++学习笔记43:STL

    STL简介(standard Template Library)
    STL的基本组件:容器(container),迭代器(iterator),函数对象(function object)
    算法(algorithms)
     
    Iterators是算法和容器的桥梁
    将迭代器作为算法的参数,通过迭代器来访问容器而不是把容器直接作为算法的参数;
     
    将函数对象作为算法的参数而不是将函数所执行的运算作为算法的一部分;
    使用STL中提供的或者自定义的迭代器和函数对象,配合STL算法,可以组合出各种各样的功能;
     
    容器
      概念:容纳、包含一组元素的对象
      基本容器类模板:
        顺序容器:array(数组),vector(向量),deque(双端队列),forward_list(单链表),list(列表)
        (有序)关联容器:set(集合),multiset(多重集合),map(映射),multiple(多重映射)
      无序关联容器:
        unordered_set, unordered_multiset,unodered_map,unordered_multimap
     
    容器适配器
      stack(栈)
      queue(队列)
      priority_queue(优先队列)
    注意:添加相应的头文件
     
    STL的基本组件---迭代器(iterator)
    1. 提供了一种顺序访问容器中每个元素的方法
    2. 可以使用++运算符来获得指向下一个元素的迭代器
    3. 可以使用*运算符访问迭代器所指向的元素,如果元素类型是类或者结构体,可以使用->运算符直接访问该元素的一个成员;
    4. 有些迭代器还支持--运算符获得指向上一个元素的迭代器
    5. 迭代器是泛化的指针,指针也具有同样的特性,因此指针本身就是一种迭代器
    6. 使用独立于STL的迭代器,需要包含头文件<iterator>

    STL的基本组件---函数对象(function object)

    1. 一个行为类似函数的对象,对它可像调用函数一样调用
    2. 函数对象是泛化的函数:任何普通的函数和任何重载了“()”运算符的类的对象都可以作为函数对象使用
    3. 使用STL的函数对象,需要包含头文件<functional>

    STL的基本组件---算法(algorithm)

    1. 可以广泛用于不同对象和内置的数据类型
    2. STL包括70多个算法(排序,消除算法,计数算法,比较算法,变换算法,置换算法,容器管理等)
    3. 使用STL的算法,需要包含头文件<algorithm>
    #include <iostream>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    #include <functional>
    
    using namespace std;
    
    int main()
    {
        const int N = 5;
        vector<int> s(N);//容器
        for (int i = 0; i < N; i++)
        {
            cin >> s[i];
        }
        
        /*
        算法:取相反数后输出;ostream_iterator<int>(cout, " "):输出流迭代器
        negate<int>() 取相反数的函数;
        transform算法的一种实现:
        transform算法顺序遍历first和last两个迭代器所指向的元素;
        将每个元素的值作为函数对象op的参数;
        将op的返回值通过迭代器result顺序输出;
        遍历完成后result迭代器指向的是输出的最后一个元素的下一个位置,transform会将该迭代器返回;
        template <class InputIterator, class OutputIterator, class UnaryFunction>
        OutputIterator transform(InputIterator first, InputIterator last, OutputItertor result,UnaryFunction op)
        {
        for(;first!=last;++first,++result)
        *result = op(*first);
        return result;
        }
        */
        transform(s.begin(), s.end(), ostream_iterator<int>(cout, " "), negate<int>());
        cout << endl;
        return 0;
    }
    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    Sql中关于日期的格式化
    linq中存储过程返回集合存在的问题
    当页面请求数据是从静态页中获取的Post方法会报405的错误
    jquery中load方法在ie下会卡住
    jquery用div实现下拉列表的效果
    jquery获取服务器端控件的方法
    【转】jquery实现文本框有提示输入的信息
    toString()方法浅谈
    Object类与上下转型
    多态
  • 原文地址:https://www.cnblogs.com/hujianglang/p/6535744.html
Copyright © 2011-2022 走看看