C++学习笔记12

STL

全称为standard template library,由以下六个部分组成
  ①容器 container,存储数据
  ②迭代器 iterator,访问容器中的元素
  ③适配器 adapter,基础数据结构------>新的数据结构
  ④算法 algorithm,对容器元素进行操作
  ⑤函数对象 functor,对元素进行定制化操作
  ⑥配置器 allocator,内存管理,对用户透明

线性容器
  • vector无pop_front,push_front方法
  • list不支持下标访问,vector和deque支持
  • 在首位置插入元素后,vector会更新迭代器的位置,deque和list不会更新
  • deque和list无capacity方法
  • list特有方法:sort,unique,reverse,splice,merge
关联容器
set
  • 插入元素只能用insert
  • 默认情况下按升序排列
  • 关键字不同
  • 不支持下标访问运算符
  • 不能通过iterator修改,但可以访问
map
  • 关键字不能相同,默认按关键字升序排列
  • 可以通过关键字访问/修改对应的值
  • 仅查找元素可以使用find/count

set和map的底层实现都是红黑树,查找和删除的时间复杂度都为O(logN)
此外还有multiset,multimap,允许关键字重复,相关操作类似,在此不再赘述

无需关联容器

底层实现为hash table

unordered_set
  • 无需不重复,迭代器不支持–
  • 只能向前遍历,不能向后遍历
unordered_map
priority_queue

利用模板实现堆排序

#include <iostream>
#include <map>

using namespace std;
template<class T>
void swap(T &a, T &b){
    T tmp = a;
    a = b;
    b = tmp;
}
template<class T, class Compare = less<T>>
class HeapSort
{
public:
    HeapSort(T *a, int n)
    :_arr(a)
    ,_n(n){};
    void heapAdjust(int start, int end){
        int dad = start, son = 2*dad+1;
        while(son < end){
            if(son+1 < end && arr[son] < arr[son+1])
                ++son;
            if(arr[dad] > arr[son])
                break;
            else{
                swap(arr[dad], arr[son]);
                dad = son;
                son = 2*dad + 1;
            }
        }
    }
    void sort(){
        int i;
        for(i = _n/2-1; i >= 0; --i){
            heapAdjust(i, _n);
        }
        swap(arr[0], arr[_n-1]);
        for(i = _n-1; i > 1; --i){
            heapAdjust(0, i);
            swap(arr[0], arr[i-1]);
        }
    }
private:
    T *_arr;
    int _n;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值