红黑树
希望一棵树 尽量平衡
红黑树 一颗高度平衡 的树
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