C++STL六大部件
引言¶
C是一个面向过程的语言,它的标准库是一个一个单一的函数,彼此之间并没有什么关联。而C++的标准模板库(STL,Standard Template Library)主要分为了六大部件,每个部件之间都有紧密的联系。本文将从一个示例出发,逐一简单介绍C++STL的六大部件。
示例:统计容器中大于等于40的个数¶
以下代码,会统计出vector
容器中,≥40的个数。程序输出结果:4
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
int ia[6] = {27, 210, 12, 40, 109, 83};
std::vector<int, std::allocator<int>> vi(ia, ia+6);
//std::vector 【容器】类型
//int 数据类型
//std::allocator<int>> 【分配器】使用STL提供的分配器
auto result = std::count_if( //【算法】计算满足条件的个数
vi.begin(), vi.end(), //【迭代器】此算法处理哪些数据,以范围的形式提供
//第三个参数需要传入一个【仿函数】,作为谓词条件
// count_if会遍历容器中的元素,分别调用这个仿函数,如果返回true,则count+1
std::not1( //【适配器】条件取反,将传入的参数取反
std::bind2nd( //【适配器】将40传入std::less<int>()函数的第二个参数
std::less<int>(),
//【仿函数】接收两个参数,比较这两个参数的大小
// 即std::less<int>(int a, int b)
// 1. count_if会遍历范围内的所有元素,并把它当成a传入less()函数
// 2. std::bind2nd将40当成b传入less()函数
40
)
)
);
std::cout << result << std::endl; //输出:4
return 0;
}
容器¶
std::vector<int> vi(ia, ia+6);
即定义了一个存储int类型的可变长数组
- 容器就是用来存放东西的
- 存放东西就要占用内存,但是容器会帮我们解决内存的事情。你无需关心内存如何管理,只需要把东西一个一个放进去、或者取出来
空间分配器¶
【为什么叫空间分配器,而不叫内存分配器】
- 有可能不是内存,有可能是硬盘、网络资源等等
- 因此,抽象谈“空间”更为广泛与适用