stl源码剖析带目录_侯捷《STL源码剖析》 | 六大部件

STL的体系结构

在leetcode的刷题过程中,有时调用到C++中的容器、迭代器,这些都封装在STL(Standard Template Library)中。偶然的机会,在B站看完侯捷老师的解析,据此作笔记记录一下,加深影响。

写在前面

使用一个东西,却不明白它的道理,不高明!

f36692d0016430d3076e12fee38467ab.png

STL的六大部件(components)

  • 容器(container)
  • 分配器(allocator)
  • 算法(algorithm)
  • 迭代器(iterator)
  • 适配器(adapter)
  • 仿函式(functor)

4a86f962a9b41837f6404302c8bd698a.png

六大部件之间的关系:

  • 容器用来存储元素,实现是一种class
  • 分配器用来给容器分配内存大小
  • 迭代器用来实现容器中元素的访问,是算法和容器之间的桥梁
  • 算法可以独立出来,通过迭代器作用到多种容器
  • 适配器用做对象的包装,使之适应不同的接口实现
  • 仿函式是一种用来实现函数功能的class

d82d4b70ee0d0769f1279ddb6293173c.png

一个实例

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

using namespace std;

int main(){
	
	int ia[6] = {27, 210, 12, 47, 109, 83};
	
	vector<int, allocator<int>> vi(ia, ia + 6);
	
	cout << count_if(vi.begin(), vi.end(),
					not1(bind2nd(less<int>(), 40)));
					
	return 0;
}
  • vector通过数组构建,container的使用
  • allocator是容器构建中使用的分配器
  • count_if是算法的一种,符合if条件则计数
  • vi.begin()、vi.end(),调用的是迭代器
  • not1、bind2nd是一种function adapter
  • less()获得一个function object

容器的基础

前闭后开区间

容器c中的元素在[ c.begin(),c.end() )之间,当迭代器遍历到c.end()的时候,实际已经脱离容器的元素区间。

3b6b34bd54777e3b37c8644b93e46d76.png

基本的遍历

使用for进行遍历

std::vector<double> vec;
for (auto& elem : vec){
	std::cout << elem << std::endl;
}

reference

  • 侯捷《STL源码剖析》

更多精彩文章,欢迎关注公众号“Li的白日呓语”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值