05-51cto-堆和适配器

1、堆 heap

make_heap(v.begin(),v.end()) 构造堆 默认大根堆

make_heap(v.begin(),v.end(),greater<int>()) 构造小根堆


放入一个元素到堆中,使其依然是一个堆

v.push_back()

push_heap(v.begin(),v.end(),greater<int>())


pop_heap 出堆 将堆顶的元素移除

pop_heap(v.begin(),v.end(),greater<int>())

v.pop_back()


sort_heap(v.begin(),v.end(),greater<int>()) 将容器元素从大到小排序,破坏堆结构


2、adapter 适配器 本质是自定义的方法

reverse_iterator 逆向迭代器 反向迭代器方向的迭代适配器

reverse_iterator< vector<int>::iterator > rit(v.end())

cout<< *rit << endl;

++rit;


front_insert_iterator 前插迭代器 以迭代器的使用方式实现,在容器开头插入元素

deque<int> d={1,2,3} 因为vector 没有push_front 所以不能用vector

front_insert_iterator< deque<int> > fit(d);

*fit =11; 头部插入 元素11


back_insert_iterator 后插迭代器 以迭代器的使用方式实现,在容器末尾位置插入元素

insert_iterator 插入迭代器 以迭代器使用方式实现,在容器的某位置插入元素

insert_iterator< vector<int> > fit(v,v.begin()+2)

*fit=11 在第二个位置插入11


istream_iterator 输入流迭代器 以迭代器的使用方式实现 cin>> 的功能

istream_iterator<int> itEnd;

istream_iterator<int> it(std::cin); 以空格键区分元素

int num1 = *it;

++it;

int num2 = *it;

ostream_iterator 输出流迭代器 以迭代器的使用方式实现 cout<< 的功能


3、萃取:iterator_traits

vector<int>::iterator::value_type

vector<int>::iterator::iterator_category

vector<int>::iterator::pointer

vector<int>::iterator::difference_type

vector<int>::iterator::reference

4、type_traits

is_void<void>::value 判断是否是 void

is_void<int>::value 判断int 是否为void类型

is_void<void *>::value 判断vlid * 是否是void类型

is_pointer<int *>::value 判断 int * 是否是指针类型

is_function<decltype(fun)>::value 是否是函数类型

is_array<int[3]>::value 是否是数组

is_base_of<a,b>::value a是否是b的基类


is_object<int>::value 是否是类


5、空间配置器 allocator

allocator<int> allo; 定义空间配置器

int *p = allo.allocate(1); 定义1个空间

allo.contstruct(p,1); 给空间赋初值 1

cout << *p << endl; 使用

allo.address(*p); 获取地址

allo.deallocator(p,1); 回收值为1的空间

allo.destroy(p)