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

    utility:

      pair为具有两个public成员的类模板。

      make_pair为一个模板函数,根据参数生成pair对象。 

          rel_ops为一个namespace,里面包含几个模板函数,可以由==、<推导出 !=、<=、>、>=,减少工作量。

    memory:

      auto_ptr智能指针类

        1.内部指针操作:

                T* get()throw();返回指向的对象的指针

            T* release()throw();返回指向的对象的指针,不再指向该对象

                T* reset(T* =0)throw();指向另一个对象,之前指向的对象被delete掉

                2.指针形为模拟:

                 T& operator*()throw();

                 T *operator->()throw(); 

        3.构造函数:

         explicit auto_ptr (X* p=0) throw();

                auto_ptr (auto_ptr& a) throw(); 无auto_ptr(const auto_ptr &)throw(),所以不能auto_ptr不能放入容器中。

                template<class Y>  auto_ptr (auto_ptr<Y>& a) throw();

                auto_ptr (auto_ptr_ref<X> r) throw();

                4.opertor=

        auto_ptr& operator= (auto_ptr& a) throw();

        template <class Y>  auto_ptr& operator= (auto_ptr<Y>& a) throw();

        auto_ptr& operator= (auto_ptr_ref<X> r) throw();

        5.类型转换操作符

        template <class Y> operator auto_ptr_ref<Y>() throw();

        template <class Y> operator auto_ptr<Y>() throw()

             auto_ptr_ref

                      auto_ptr_ref是auto_ptr的辅助类。因auto_ptr没有const & copy构造函数,所以auto_ptr对象不能用右值进行初始化,这意味着 auto_ptr(auto_ptr<T> (ptr))这种用临时量进行初始化的写法是不能通过编译的,同时auto_ptr对象也不能在函数间进行传递。 auto_ptr_ref正是为了解决这个问题而产生的。使用的时候完全可以当它不存在。

        auto_ptr使用禁忌:1.不能指向数组,因为它释放使用的是delete,而不是delete [];2,auto_ptr不能存入容器。

        get_temporary_buffer申请一块未经初始化的内存  return_temporary_buffer将get_temporary_buffer申请到的内存回收。(vc6中为__get_temporary_buffer)

        raw_storage_iterator用于将未经初始化的内存包装成一个output_iterator。

        uninitialized_copy,unitialized_fill,unitialized_fill_n对应 copy,fill,fill_n.后者操作经过初始化的内存,前者操作未经初始化的内存(malloc,get_temporary_buffer等返回)。

      functional:提供仿函数支持

           Base class:  

          unary_function<argument_type,result_type>

             binary_function<first_argument_type,second_argument_type,result_type>

       Operator classes:对常用操作符进行包装

             plus:+,minus:-,multiplies:*,divides:/,modulus:%,negate:-

          equal_to:=,not_equal_to:!=,greater:>,less<,greater_equal:>=,less_eqaul:<=

                    logical_not:!,logical_and:&&,logical_or:||

       适配器和转换函数:

           not1,not2用一个仿函数(设为funA)生成另一个仿函数(设为funB),funB功能相当于!funA.

         not1要求funA继承自unary_function或者 typedef 了 argument_type类型,并且返回值允许!操作.

           not2要求funB继承自binary_function或者 typedef 了 first_argument_type 和 second_argument_type,并且返回值允许!操作

         bind1st,bind2nd将二参仿函数的一个参数绑定成一个固定值,生成一个一参仿函数。要求二参仿函数继承自

    binary_function或者typedef 了 first_argument_type,second_argument_type,result_type。不支持返回值为void

    的仿函数的转换。

         ptr_fun,mem_fun,mem_fun_ref根据 函数生成相应的仿函数

           ptr_fun支持非成员函数的转换,只支持一参和二参函数

             mem_fun,支持类成员函数的转换,只支持无参及一参成员函数。类对象通过指针传递

             mem_fun_ref,支持类成员函数的转换,只支持无参及一参成员函数。类对象通过引用传递

      algorithm:通用算法库

              for_each,transform遍历算法,for_each只接受一参函数,transform接受一参与二参函数,且把结果存入另一个序列。

         find,find_if,find_end,find_first_of,search,search_n,adjacent_find   find算法.find_end与search相似,都是搜索子串,find_end从后面找,search从前面找。search_n搜索n个连续相同元素的起始位置。adjacent_find搜索相邻元素满足条件第一个出现的位置,默认条件为==。

           count,count_if 计算满足条件的元素的个数,默认操作为==

         mismatch比较两个序列,返回它们开始不同的位置。

         equal比较两个序列是否相等

         copy,copy_backward复制算法,copy_backward从后往前copy,可处理两个序列指向的元素有交叉的情况。

           swap,swap_ranges,iter_swap交换算法,功能分别为交换两个对象的值,交换两个序列的值,交换两个迭代器所指对象的值。

                   replace,replace_if,replace_copy,replace_copy_if替换算法。 带_copy的不修改原序列,结果存入另一个序列。

           fill,fill_n,generate,generate_n填充算法。默认用[first,last)来表示这个序列,_n表示用first与n来表示序列。generate与fill的不同在于,fill用一个用户传递的值填充,而generate用一个函数的返回值来填充。

            remove,remove_if,remove_copy,remove_copy_if 移除序列中的某些元素。remove移除值==某值的元素。remove_if移除满足条件的元素。 加上_copy则不改动原序列,将改动后的结果存入另一个序列。

          unique,unique_copy 如果序列中有相连的元素之间满足条件,则后者被移除。默认条件为==。

           reverse,reverse_copy将序列中所有元素的位置颠倒过来。

          rotate,rotate_copy 旋转整个序列,参数有3个,first,last,middle,[first,last)表示序列,middle表示要将middle所指的元素旋转到first的位置。

           random_shuffle将整个序列打乱重排,可指定产生随机数据的函数。要求输入的序列为RandomIterator表示。

          partition,stable_partition,将一个序列打乱重排,满足条件的排前面,不满足条件的排后面,返回不满足条件的元素的起始位置。stable_partition在重排的过程中不会打乱同组(满足条件,不满足条件)元素原本的前后顺序。

        sort,stable_sort,partial_sort,partial_sort_copy,nth_element 排序。迭代器要求为RandomIterator。sort默认用<比较,得到升序序列,可以另指定比较函数。stable_sort相比sort,不会打乱原来相等的两个元素的前后位置。partial_sort取得前n个最小的元素,这几个元素有序,其它元素无序。nth_element(first,middle,last) 将序列重排,middle之前的元素都比middle之后的元素小,*middle刚好是第middle-first个元素,而前后两部分都不保证有序。 sort,partial_sort,nth_element 从前到后,排序的有序程度依次降低,效率则依次上升。

          min,min_element,返回最小的那个元素,可指定比较函数,默认为<

          max,max_element返回最大的那个元素,可指定比较函数,默认为<

          lexicographical_compare 按字典序比较两个序列。

          next_permutation,prev_permutation将序列按字典序重排列为 下一种/上一种形式。返回值为false表示不存在下一种/上一种形式了。

          make_heap,push_heap,pop_heap,sort_heap 堆操作,make_heap生成堆,push_heap,pop_heap对堆 进行push,pop操作.sort_heap将堆排成有序序列。push的数及pop的返回值都放在last-1位置上。make_heap+sort_heap=堆排序。

        以下算法要求序列为排过序的:

          lower_bound,upper_bound,equal_range,binary_search。 binary_search用二分查找法查找一个元素是否存在,返回true或false。

          merge合并两个sorted的序列。

          inplace_merge,若一个序列用[first,last)表示,[first,middle)和[middle,last)都是sorted,那么inplace_merge可以将这个序列整体排序。

          set_union合并两个sorted序列,去掉重复的元素

          set_intersection 取得两个序列的交集

          set_difference    取得两个序列的差集

          set_symmetric_difference  相当于 set_difference(set_union,set_intersection)

          includes :测试一个sorted序列是否包含另一个sorted序列

          

           

           

           

         

  • 相关阅读:
    flowable ui 界面请假流程操作实例
    访谷歌看油管 这里有你想要的!!!
    Termux中使用数据线传输文件
    Vue中使用ECharts图表展示数据
    vue项目使用阿里图标库图标
    linux下使用命令行查看天气预报情况
    在博客或者其他Html页面新增浮动音乐播放器
    Vue实现弹窗拖动放大缩小
    分享一个IDEA 免费注册码分享站点
    远程命令执行之------电脑自动执行页面输入的指令
  • 原文地址:https://www.cnblogs.com/vsuu/p/2636497.html
Copyright © 2011-2022 走看看