zoukankan      html  css  js  c++  java
  • STL--STL和她的小伙伴们:

    STL--概述:
      标准模板库(StandardTemplateLibrary,STL),是C++程序设计语言标准模板库。STL是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。虽然它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
    STL是所有C++编译器和所有操作系统平台都支持的一种库,包含了很多在计算机科学领域里所常用的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应用框架,高度体现了软件的可复用性。
      对所有的编译器来说,提供给C++程序设计者的接口都是一样的。也就是说同一段STL代码在不同编译器和操作系统平台上运行的结果都是相同的,但是底层实现可以是不同的,使用者并不需要了解它的底层实现。
    使用STL的应用程序保证得到的实现在处理速度和内存利用方面都是高效的,因为STL设计者们已经考虑好了。
    使用STL编写的代码更容易修改和阅读。因为代码更短,很多基础工作代码已经被组件化了;使用简单,虽然内部实现很复杂。
      STL是建立在模板函数和模板类基础之上的功能强大的库。
      模板函数可以实现一般化的常用算法(如统计、排序、查找等)
      模板类可以实现支持几乎所有类型的容器,用来实现常用的数据结构(如链表、栈、队列、平衡二叉树等)
                                  STL 头文件一览表:
     

    头文件

    内容

    头文件

    内容

    <iterator>

    迭代器

    <vector>

    向量

    <utility>

    辅助功能

    <deque>

    双头队列

    <memory>

    内存管理

    <list>

    链表

    <algorithm>

    算法

    <set>

    集合与多重集合

    <functional>

    函数对象

    <map>

    映射与多重映射

    <numeric>

    数值运算

    <stack>

       

    <queue>

    队列与优先队列

     
     
     
    迭代器的定义和种类:
    n迭代器(iterator)实际上是一种一般化的指针类型,是对指针类型的抽象。
    n根据所支持操作的不同,迭代器被分为五大类:
    ¨输出迭代器(input iterator)
    ¨输入迭代器(output iterator)
    ¨前向迭代器(forward iterator)
    ¨双向迭代器(bidirectional iterator)
    ¨随机迭代器(random access iterator)
     
                                                                                            各种迭代器的功能

    迭代器类型

    输出迭代器

    输入迭代器

    前向迭代器

    双向迭代器

    随机迭代器

    缩写

    Out

    In

    For

    Bi

    Ran

    读取

    不支持

    x =   *p

    x =   *p

    x =   *p

    x =   *p

    操作

    不支持

    p->x

    p->x

    p->x

    p->x   p[i]

    写入

    *p   = x

    不支持

    *p   = x

    *p   = x

    *p   = x

    迭代

    ++

    ++

    ++

    ++   --

    ++   -- + - += -=

    比较

    不支持

    ==   !=

    ==   !=

    ==   !=

    ==   != < > <= >=

     
     
    更多关于迭代器的信息:
    指针类型就是一种特殊的随机迭代器类型。
    对于一般的迭代器,这些功能都是通过操作符重载来实现的。
    各种迭代器类型之间的关系:
                                                                         输出迭代器
     随机迭代器---》双向迭代器---》向前迭代器---》
                                                                         输入迭代器
     
    迭代器的作用
    ¨访问元素
    ¨算法与容器之间的纽带
     
     
    与算法有关的知识:
     
    算法(algorithm)
    ¨每个算法都是一个或者一组模板函数,用来完成一项特定的操作。
    序列(sequence)
    ¨序列用两个迭代器来描述,表示一组连续的元素;其中,第一个迭代器指向序列中的第一个元素,第二个迭代器指向序列最后一个元素的后一个位置。
    函数对象(function object)
    ¨函数对象重载了函数调用操作符(operator ()),可以像普通函数一样被使用。
    谓词(predicate)
    ¨返回值类型为bool的函数对象
     
    常用函数对象:
    STL在头文件<functional>中提供了一些常用运算的函数对象。
     

    类名

    类型

    作用

    equal_to

    双目

    arg1   == arg2

    not_equal_to

    双目

    arg1   != arg2

    greater

    双目

    arg1   > arg2

    less

    双目

    arg1   < arg2

    greater_equal

    双目

    arg1   >= arg2

    less_equal

    双目

    arg1   <= arg2

    logical_and

    双目

    arg1   && arg2

    logical_or

    双目

    arg1   || arg2

    logical_not

    单目

    !arg

    plus

    双目

    arg1   + arg2

    minus

    双目

    arg1   - arg2

    multiplies

    双目

    arg1   * arg2

    divides

    双目

    arg1   / arg2

    modulus

    双目

    arg1   % arg2

    negate

    单目

    -arg

     
    STL算法一览:
    访问元素类
    ¨for_each(), transform()
    顺序查找类
    ¨find(), find_if(), find_first_of(), adjacent_find(), search(), find_end(), search_n()
    统计类
    ¨count(), count_if()
    比较类
    ¨mismatch(), equal(), lexicographical_compare()
    复制类
    ¨copy(), copy_backward()
    交换类
    ¨swap(), iter_swap(), swap_ranges()
    替换类
    ¨replace(), replace_if(), replace_copy(), replace_copy_if()
    填充发生类
    ¨fill(), fill_n(), generate(), generate_n()
    删除类
    ¨remove(), remove_if(), remove_copy(), remove_copy_if
    去重类
    ¨unique(), unique_copy()
    反转类
    ¨reverse(), reverse_copy()
    旋转类
    ¨rotate(), rotate_copy()
    随机打乱类
    ¨random_shuffle()
    排序类
    ¨sort(), stable_sort(), partial_sort(), partial_sort_copy(), nth_element()
    二分查找类
    ¨lower_bound(), upper_bound(), equal_range(), binary_search()
    合并类
    ¨merge(), inplace_merge()
    ¨partition(), stable_partition()
    集合运算类
    ¨includes(), set_union(), set_intersection(), set_difference(), set_symmetric_difference()
    堆操作类
    ¨make_heap(), push_heap(), pop_heap(), sort_heap()
    最大最小类
    ¨min(), max(), min_element(), max_element()
    排列类
    ¨next_permutation(), prev_permutation()
    数值运算类
    ¨accumulate(), inner_product(), partial_sum(), adjacent_difference()
     
                                                                                                常用STL容器
     

    名称

    描述

    所在头文件

    迭代器类型

    vector

    向量

    <vector>

    随机迭代器

    deque

    双头队列

    <deque>

    随机迭代器

    list

    链表

    <list>

    双向迭代器

    stack

    <stack>

    不提供迭代器

    queue

    队列

    <queue>

    不提供迭代器

    priority_queue

    优先队列

    <queue>

    不提供迭代器

    set

    集合

    <set>

    双向迭代器

    multiset

    多重集合

    <set>

    双向迭代器

    map

    映射

    <map>

    双向迭代器

    multimap

    多重映射

    <map>

    双向迭代器

     
    一般容器:
      vector            deque                list
     
    容器适配器:
      栈stack
      队列queue
      优先队列priority_queue
    关联容器:
     
    元素有序
    用平衡二叉树实现
    类名:set, multiset, map, multimap
    分类
    ¨按元素构成来分
    集合:元素本身就是关键字,直接参与排序
    映射:元素由关键字和被映射的值构成,只有关键字参与排序
    ¨按关键字能否重复来分
    普通:关键字不能重复
    多重:关键字允许重复
     
     
    关联容器的特殊成员函数:
     
    查找类
    ¨find()
    ¨lower_bound()
    ¨upper_bound()
    ¨equal_range()
    复合类
    ¨operator []()
     
    STL的优缺点:
    优点:
    ¨降低编程复杂度
    ¨提高代码的正确率
    缺点:
    ¨编译时会出各种错误
    ¨给动态调试增加难度
     
    给几条建议吧:
    多用STL的算法
    优先使用内置数组
    多用静态查错
    动态查错时向屏幕输出
     
    小节:
    STL以面向对象的程序设计和一般化编程为基础,提供了功能强大的算法和容器,并通过迭代器把这两部分有机地结合起来
    haha
  • 相关阅读:
    Android笔记之spinner的使用
    Android笔记之AlertDialog使用
    Android笔记之intent使用(一)
    Android笔记之Editext使用
    Android控件之Textiew的使用
    Fastboot常用命令集,完美取代Recovery的所有功能
    Android笔记之WebView
    Android程序下重启手机
    Android笔记之ListView组件的使用
    intellij idea设置(字体大小、背景)
  • 原文地址:https://www.cnblogs.com/acm1314/p/4540576.html
Copyright © 2011-2022 走看看