侯捷C++STL学习记录(三)

红黑树

希望一棵树 尽量平衡
红黑树 一颗高度平衡 的树
begin() 记录 红黑树的最左边的 left 元素

在这里插入图片描述
map 允许data被改变,只有元素的key 不可以被改变
rb_tree 提供两种 insertion操作: insert_unique() 和insert_equal()
insert_unique(): key在tree 中独一无二 若key重复安插失败.

容器rb_tree
在这里插入图片描述
各种容器元素内部数据大小
在这里插入图片描述
仿函数本身没有 数据 不占用内存 但是为了计算方便 还是会计算为1 (编译器默认4的倍数分配内存,所以为 12 )
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
容器 set multiset
无法改变set 的值
set 代码
在这里插入图片描述
容器 map
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
map 独特的中括号[] 只有map 有
eg : 如果 索引index=327 存在 则返回 key 对应的value
如果不存在 则把 key 和value插入相应的位置
map[ i ]=10 ; 赋值操作
在这里插入图片描述

hash able

打散规则 : 元素个数比篮子个数多 就要打散,一般扩冲为质数
在这里插入图片描述
hash_function hash_code
在这里插入图片描述
在这里插入图片描述
unorded容器概念
在这里插入图片描述

假如放1000000万个元素进去
篮子的数 一定比 元素个数大
在这里插入图片描述

C++ 标准库算法

在这里插入图片描述
标准库六大 部件
1 容器
2 算法
3 迭代器
4仿函数
5 适配器
6 分配器
在这里插入图片描述

C++ 算法 (11 个)
在这里插入图片描述

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <numeric>
#include <functional>
using namespace std;


namespace test01 {
	int myfunc(int x, int y) {
		return x + 2 * y;
	}

	struct myclasss {
		int operator()(int x, int y) {
			return x + 3 * y;
		}
	}myobj;
}

int main()
{
	int init = 100;
	int num[] = { 10,20,30 };
	cout << accumulate(num, num + 3, init);
	printf("%\n");
	cout << accumulate(num, num + 3, init,minus<int>());
	printf("%\n");
	cout << accumulate(num, num + 3, init, test01::myfunc);
	printf("%\n");
	cout << accumulate(num, num + 3, init, test01::myobj);
}

在这里插入图片描述

算法2 for_each () 对每一个 值进行操作
现在用C++ 11 新语法 range base for statement
算法3 replace replace_if replace_copy
带有if 的表示你要给他一个条件

在这里插入图片描述
find find_if 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

lower_bound 例子 : 10 10 10 20 20 20 30 30
比如要插入 20 则插入第一个20 前面
upper_bound 则插入 最后一个 20 后面
在这里插入图片描述

仿函数

仿函数一般算法来服务
1 比如排序算法的独特准则
必须重载小括号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果 想被STL 或者其他适配访问
就必须要继承 unary_function 或者 binary_function
主要是为了用里面的参数 typedef 重新定义的参数.

容器适配器 stack 和queue

函数适配器 binder_2nd

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值