3.8-3.14周学习总结

本周学习的基础知识:

STL可以分为算法类与容器类;

1.算法类:

-快速排序 sort(a,a=10)

-数据交换 swap(a,b)

-下一个排列 next_permutation(a,a+n)

如3位数的全排列有123、132、213、231、312、321

设a的排列为123,使用函数next_permutation(a,a+1)后返回132

注意,若a为最后一个排列,如321,使用一次函数无作用,再次使用函数得123

-最值 template<class_Tp>

2.容器类:

-字符串string

-不限长度的数组vector

-队列queue、堆栈stack、双端队列deque

-优先队列priority_queue

-简单红黑树set

-通过键值建立的平衡二叉树map

-允许多个相同值的上述两种结构multiset和multimap

-位集bitset

————————————————————————

vector向量是一个看上去很像链表的顺序容器,是一个不限制数组长度的数组【但因为申请内存的原理,处理大量数据时比数组慢】

-基础数据访问:operator[]、top()、back()

-简单的数据操作:erase(int index, int size)、insert(int index, int size)、push_back(int value)、pop_back()

-自身属性操作:size()、重新整理内存单元resize(int size)

-整体操作:清空向量clear()、判断是否为空empty()

————————————————————————

iterator迭代器时用于访问容器内数组的指针,使用更加稳定

-返回容器第一个元素a.begin()

-返回容器末尾元素a.end()

迭代器使用遵循左闭右开原则,begin访问第一个元素,end访问第一个无效元素(最后一个有效元素的下一位)

vector<int>a;//定义向量容器
vector<int>::iterator it;//定义向量的迭代器
for(it=a.begin(); it!=a.end(); it++)//使用迭代器遍历容器

————————————————————————

stack栈是仅在表头进行插入和删除操作的线性表;需使用头文件<stack>;可能会出现爆栈问题!

常用函数:向栈顶压入元素push()、弹出栈顶元素pop()、访问栈顶元素top()

queue是仅在表头front插入,在表末rear插入的特殊线性表;需使用头文件<queue>

常用函数:访问队首元素front()、访问队尾元素back()、向队尾插入元素push()、弹出队首元素pop()

————————————————————————

priority_queue优先队列顾名思义,就是优先级最高的元素先出队,每次push和pop操作后队列都会动态调整

相关函数:top()、pop()、插入新元素push(item)

在STL中,优先队列是用二叉堆实现的,在队列中push或pop一个元素,复杂度是O(log2n)

或者push所有数后把数据一个个top出来用来排序,总复杂度是O(nlog2n)

————————————————————————

set集合由二叉搜索树实现,容器内数据唯一且排好序的,访问元素的复杂度为O(log2n),非常高效

————————————————————————

map是关联容器,使用平衡二叉搜索树储存和访问,实现从键(key)到值(value)的映射

操作方法:

定义——map<string, int>student,存储学生的name和id;

赋值——如student["Tom"]=15这里把"Tom"当成普通数组下标来使用;

查找——查找学号时,可以直接用student["Tom"]表示他的id,不用再去搜索所有姓名;

————————————————————————

最后是两个sort相关的函数:

stable_sort():稳定的排序,当排序元素相同时,保持原来的顺序。

partial_sort():局部排序,如10个数求最小的5个,使用sort()排序需要先全部排序再输出5个,而p可以直接输出前5个

————————————————————————

本周还学习了贪心算法的基本知识,鉴于我还没有完全掌握,就放在下一周的总结中。

希望下周能解决一些常见的贪心算法的问题:

1.活动安排问题

2.区间覆盖问题

3.最优装载问题

4.多机调度问题

5.Huffman编码

6.模拟退火

完成习题:

Hdu1789、1050、2546、3348、4864、1328、1089

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值