C++学习16:STL体系结构和基础介绍

学习标准库时要理解:源码之前,了无秘密!
STL,即标准模板库。是通过泛型编程(GP)得到的广为程序员所使用的库。

0 基础知识

1、OOP:面向对象编程,企图将datas和methods关联在一起。类似独属自己的函数,仅对自己进行操作。
2、GP:模板编程,要将datas和methods分开来。类似全局函数,要对各种东西都能操作。处理数据的方式是借助迭代器。好处:使得容器和算法全队各自独立。而所谓算法,内部的最终操作无非就是比大小
3、操作符重载:详见:操作符重载,在该博客的2.2.2。一定要重载的操作有operator*(),operator->(),operator++(),operator++(int)这四个。
4、类模板和函数模板:详见:模板的类型和特化

1 STL的六大部件及关系

六大部件为:容器、分配器、算法、迭代器、适配器、仿函数。其关系如下图。
在这里插入图片描述
1、容器:是存储数据的一种东西。使用容器时,我们不需要管内存,只需要把数据放进容器中就可以了。
2、分配器:完成给容器分配内存的工作,是来处理容器的。
3、算法:有在容器本身里面做的一些操作,还有更多的操作是独立出来的,作为一个个模板函数,这就是算法。
4、迭代器:让算法处理数据的桥梁。迭代器类似一种泛化的指针。
5、仿函数:将两种奇奇怪怪的类型进行操作的函数,如两个石头比大小这种。
6、适配器:类似变压器,做“转换”操作。

2 使用STL进行编程的例子:

在这里插入图片描述
11行:使用vector容器,给其分配空间的分配器是int类型;
13行:使用count_if算法,计算复合14行条件的元素有几个。指定的vi.begin()和vi.end()是头尾迭代器;
14行:是一个predicate,即一个判断是不是的操作。计算大于等于40的元素有几个,使用了仿函数less来进行比较大小,接口适配器是bind2nd绑定第二参数为40,适配器not1就变成了大于40。

3 有关算法复杂度:

在这里插入图片描述

4 容器的前闭后开区间

所有的容器都遵循这样的规则:
在这里插入图片描述
下面这段代码很是重要,遍历容器时可用:

Container<T> c;
Container<T>::iterator ite = c.begin();
for(; ite != c.end(); ++ite)
{
	...
}

在C++11之后,有了新的一种方式,即range_base for,详见

for(int i : {2, 3, 5, 7, 9, 13, 17, 19})
{
    cout<< i << endl;
}

vector<double> vec;

for(auto elem : vec)//pass by value
{
    cout << elem << endl;
}

for(auto& elem : vec)// pass by reference
{
    elem *= 3;
}

上面的代码引入了auto,在写代码时,我们也可以适度的使用auto。
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值