认识STL(一):STL概述

什么是STL

STL(standard template library)称为标准模板库,采用了泛型程序设计、
泛型编程(generic programming)的思想,将程序写得尽可能通用
将算法从数据结构中抽象出来,成为通用的C++的模板为泛型程序设计奠定了关键的基础
STL分为六大部件

  • 容器(Containers)
  • 分配器(Allocators)
  • 算法(Algorithms)
  • 迭代器(Iterators)
  • 适配器(Adapters)
  • 仿函数(Functors)

六大部件交互关系

这里写图片描述
1. 其中,容器解决了内存的全部问题,我们只关心存放数据
2. 分配器用来支持容器,从实现的角度来说分配器是实现了一个动态分配空间、空间管理、空间释放的class template(类模板)。
3. 迭代器用来操作容器
4. 算法与容器互不可见,算法只能通过迭代器来处理容器里的数据,从实现的角度来说算法是一种function template(函数模板)
5. 仿函数,作用像是一个函数,但是实际是重载了operator()的class或class template(类模板)
6. 适配器,可以转换容器、迭代器、仿函数,为已有的东西提供新的接口,使其更加安全、使用更加方便等等。

一个小测试程序

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

int main()
{
    int ia[6] = {27,210,56,58,92,45};
    vector<int, allocator<int> > vi(ia, ia+6);

    cout << count_if(vi.begin(), vi.end(),
                not1(bind2nd(less<int>(), 40)));

    return 0;
 } 

这段程序的功能是统计vi里大于40的元素有多少个,其中:
vector是一个容器 ,allocator是分配器,在这里我们显示调用分配器,只是为了展示一下用法,在平时的使用中并不需要,在vector的实现中会自动调用分配器,后面我们将会看到这部分的实现代码。
count_if是一个算法,vi.begin()、vi.end()是迭代器,nto1是函数适配器,less是一个仿函数,在这一段测试程序中六个部件都用到了。

猜你喜欢

转载自blog.csdn.net/chuxin126/article/details/78180808
STL