C++ STL

之前一段时间听了侯捷老师来学校的课程,感觉学了很多东西,现在整理两篇笔记上来

什么是STL

  STL(standard template library)标准模板库。是一个令所有开发者兴奋的工具和组件的集合。现在,STL是C++的一部分,被内建在编译器内,但是不同的编译器对于STL的实现有些地方是不同的。template 是实现范型的一种C++语法,它依赖于用户提供的type,并在编译阶段实现。范型编程和OO面向对象编程是完全相反的理念。因为,OO是将行为封装在类里面。而范型编程却是,假如有很多个类,它们具备一些相同或者相似的行为,只是这些行为可能会依赖于这个类。我们就将这些相似的行为给提取出来,用统一的手段进行处理。而用户在使用时,就提供需要处理的类型,这样就是所谓的范型了。

  template又分为三种

    • class template:类模板,带有模板的类
    • function template:函数模板,带有模板的函数
    • member template:成员模板,带有模板的成员变量

STL的六大组件

  • Container 容器,vector,list等都是容器
  • Algorithm 算法,排序,比较等
  • Functor(Function Object) 函数对象
  • Iterator 迭代器
  • Adapter 适配器
  • Allocator 分配器,分配器为container分配内存

Function Object

Function Object 是行为像function的object。用代码比较好理解。

1
2
3
4
5
6
7
8
9
10
11
template
struct Functor{
     T operator()(T a,T b){
         return a<b;
     }
};
 
int main(){
     Functor f1;
     cout<<f1(3,5);
}

这里明明f1是一个struct对象,为什么我们像却这样使用它呢?其实很简单,因为我们在struct中对functor的括号”()”进行了重载,所以我们可以这样进行使用它。这样做的目的很明显,苹果在Objective-C中加入了block的机制,block其实就是function object。目的都是为了对函数进行传递。使我们在这个类中定义的一个函数,然后另外一个类来使用它。block在OC中通常作为回调使用。

容器

STL中有各种数据结构的容器。其中主要分为两类,一种为顺序容器,一种为关联容器。

顺序容器:

  1. 数组 array:C++内建,而不是STL中的
  2. vector:连续存储空间
  3. heap:堆,以算法形式呈现
  4. priority-queue:优先队列
  5. list:双向链表
  6. slist:单向链表
  7. deque:双向队列
  8. stack:栈,容器适配器,由deque用适配器模式构造而成
  9. queue:队列,容器适配器,由deque用适配器模式构造而成

关联容器:

  1. RB-tree
  2. set
  3. map
  4. multiset
  5. multimap
  6. hashtable
  7. hash_set
  8. hash_map
  9. hash_multiset
  10. hash_multimap

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值