zoukankan      html  css  js  c++  java
  • 2.概括

    一。STL六大组件

    1.容器(container),各种数据结构: vector, deque, list, forward_list, array, set, multiset, map, multimap, unordered_set, unordered_multiset, 

    unordered_map, unordered_multimap. 从实现的角度来讲,STL容器是一种class template。

    2.算法( algorithm),各种算法例如: sort, search, earse, copy。从实现角度来说,算法是一种function template.

    3.迭代器(iterator)容器和算法之间的粘合剂,是所谓的“泛型指针”,从实现的角度迭代器是一种将 operator*, operator->, operator++, operator--

    等指针相关操作重载的一种class template。

    4.仿函数(functor)行为类似函数,可作为某种算法的策略(policy),从实现的角度来讲是一种重载的operator()的class或者 class template。

    5.适配器(adapter) 一种用来修饰容器(container),或者仿函数(functor),或者迭代器(iterator)接口的东西。例如STL提供的queue和stack
    虽然看似容器,但是只是一种容器适配器。因为他们底层完全借助于deque,所有操作都是由底层的deque供应。改变functor接口,称为functor adapter。
    改变container接口,称为container adapter。改变iterator接口,称为iterator adapter。
     
    6.配置器(allocator):负责空间和内存的配置和管理。从实现角度来讲。配置器是实现动态内存分配和内存释放的class template。
     
          
     
    1.container从allocator那里分配内存空间,储存数据。Algorithm通过iterator连接container。functor辅助algorithm完成不同策略变化,adapter修饰各种接口。
     
    template <class Type>
      关键字template告诉编译器,将要定义个模板。尖括号中的内容相当于函数的参数列表。把关键字class看作变量的类型名,该变量接受类型作为其值
    把Type看作该变量的名称。通用类型标识符----例如这里的Type----称为类型参数(type parameter),这意味着它们类似于变量,但赋给它们的不能是数
    字,而只能是类型。
     
    STL里面有什么呢?
      容器(data)和算法(operates on data that in containers)。面向对象语言是结合数据和算法到一个类中,这个类的实例被称为对象。但STL和
    面向对象语言不同,它分开数据和算法,这样做的目的是代码重用。
      正常情况下,如果我们有N个容器,M个算法。M个算法运用到N个容器中,共有N*M种实现(每一个容器都要实现M种算法)。为了解决这个问题
    STL提供了另外一类组件,迭代器(iterators)。每一种容器都必须提供给迭代器定义的公共接口。
      迭代器能在容器中迭代每一项。所以算法不用直接作用于容器,而可以作用于迭代器。所以算法不用知道容器,只用知道容器中的迭代器就够了。
    这极大的提升了代码重用,原来是N*M种实现,而现在只需要N+M种实现。这种结构的另外一种好处是极易拓展,如果定义了新的一种算法,能够作用
    于迭代器,那么这种算法适用于已经存在的所有容器。如果定义了一个新的容器(容器提供了迭代器的接口),那么容器能都运用现存的所有算法。
      正如你看到的STL多么能够重用。但是这些重用是有代价的,因为STL不是很容易使用,里面有很多陷阱。
     
        
     
    2.使用STL的原因:
      1.代码重用,不用重新造轮子。
      2.高效。现代c++编译器都优化了STL代码。
      3.精确,比较少的bug。
      4.简洁易懂的代码,能够减少控制流。
      5.能够深刻理解数据结构和算法。
      
     
     
  • 相关阅读:
    栈区,堆区,全局区,文字常量区,程序代码区 详解
    2010年IT行业十大收购
    三大数据备份方式:完全备份、增量备份以及差异备
    Driver Development Part 1: Introduction to Drivers (code project)
    手工构造典型PE文件(转)
    访问IIS元数据库失败[转]
    代码注入的三种方法(转)
    对象的初始化(转)
    网络和黑客编程基本知识 (转)
    破解linux中root密码(图) 转自csdn
  • 原文地址:https://www.cnblogs.com/billxyd/p/7447014.html
Copyright © 2011-2022 走看看