2021-03-13

本文回顾了一周内ACM课程的学习内容,包括STL中的string、stack、queue、vector等容器的应用,以及sort、priority_queue、set等功能的介绍。还提到了贪心算法的基本概念。
摘要由CSDN通过智能技术生成

                                                                                             第一周  学习周记 

        这个周我正式进入了ACM选修课的学习,这其实对我来说是一个不小的挑战,我也没谱,可就是因为这样,我觉得有的时候给自己一些challenges,生活与学习才会变得不一样,才会变得有意义。说完了这个下面就要将本周所学进行回顾整理。

         这个周主要学了stl中的一些标准函数及简单应用。

         1.string类:字符串类。可以完成很多字符数组完成起来比较麻烦的操作问题。可以直接赋值、比较、连接、运算等等。

          当面对大量的数据cin与cout输入输出速度不如scanf与printf时可以尝试用ios::sync_with_stdio(false);来提高运行效率。

          string::size_type n;(足够大的存储类型)

         2.stack:栈是一种只能在某一端插入和删除数据的特殊线性表。他按照先进先出的原则存储数据,先进的数据被压入栈底,最后进入的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后被压入栈的,最先弹出),只能操作栈顶。因此栈也称先进后出表。

        3.queue:是典型的先进先出容器,FIFO(first-in-first-out),通俗点说就,这个容器就像是在排队,走的人在前面走,来的人在后面排,排队的顺序和离开的顺序是相同的。

      empty() -- 返回bool型,表示queue是否为空 (q.empty() )     size() -- 返回queue内元素个数 (q.size() )     front() -- 返回queue内的下一个元素 (q.front() )     back() -- 返回queue内的最后一个元素(q.back() )     pop() -- 移除queue中的一个元素(q.pop(); )     push(data_type a) -- 将一个元素a置入queue中(q.push(a); )

        4.vector:简单地说,vector是一个能够存放任意类型的动态数组,能够增加和删除数据,可以直接访问向量内任意元素。学到了一个函数一个空函数empty()返回值为bool型。

        5. sort:快速排序函数。sort(begin, end, cmp);第一个参数为数组的首地址,第二个参数为数组的末地址的下一位,第三个参数为比较函数。如果缺省的话就默认按照升序排列,相反写的话就可以自己定义一种排序方式。

        6.priority_queue:优先队列priority_queue可理解为一个大根堆,有特定权值的先出队,也形象的举个例子。拍卖,无论出手多晚,只要出价足够高,就可以拿走拍卖品。(但是,在优先队列里,元素排列绝对不是完全单调的,只能确定队首元素是最大的,保证出队顺序是单调的),不是排序。

        7. set/multiset:两容器相似,但set为有序集合,元素不能重复,multiset为有序多重集合,可包含若干相等的元素,可以放结构体,但是一定要重载排列方式,不然编译都过不了,set的查找于插入元素的复杂度为log(N),是一个比较好用的容器。
PS:但是,在使用结构体时,有几个元素,就要写几个元素的比较,不然会被视为同一个元素。

        8.map/multimap:map映射容器的元素数据是由一个Key和一个Value成的,key与映照value之间具有一一映照的关系。map插入元素的键值不允许重复,类似multiset,multimap的key可以重复。比较函数只对元素的key进行比较,元素的各项数据只能通过key检索出来。虽然map与set采用相同的数据结构,但跟set的区别主要是set的一个键值和一个映射数据相等,Key=Value。就好像是set里放的元素是pair组成了map,map的key也可以为自定义数据类型,但是也要像上文set一样写重载函数。count:把标志范围内的元素与输入值比较,返回相等元素个数。

find:对指定范围内的元素与输入值进行比较。当匹配时,结束搜索,返回该元素的一个迭代器。
lower_bound:返回一个迭代器它指向在的有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个不小于value 的值,即返回第一个大于或等于value第一个位置。upper_bound: 返回一个迭代器,指向在有序序列范围内插入value而不破坏容器顺序的最后一个位置,该位置标志一个大于value的值,即返回第一个大于value的位置unique(可用于离散化)清除序列中重复元素,和remove类似,它也不能真正删除元素。swap: 交换存储在两个对象中的值。next_permutation:取出当前范围内的排列,并重新排序为下一个排列。prev_permutation:取出指定范围内的序列并将它重新排序为上一个序列。如果不存在上一个序列则返回false。

       贪心算法:寻求问题的最优解。先判断是否适用于贪心策略,再选择贪心标准。所有的贪心都要进行排序。

       总的来说吧这个周接触了很多的知识这是我之前任何时候所没遇到的,是因为脑子里面没有代码,不够熟悉,这是很重要的一部分 ,也是我以后要多付出、多努力的地方。以后还有很长的时间来学习,我相信凭借自己的努力可以慢慢追赶上来的。同时在学习上也要做出改变,每次上完课无论怎样都要在课下的时候立马回顾,免得以后积攒的的越来越多,无法很好的掌握。                 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值