2017huas_ACM第三天
暑假集训第三天。
就在刚才AC了第十题,本周做题拿到了满分。
软件工程专业没有学习C++语言,这在做题过程中给了我不少的麻烦。遇到什么不懂的,不确认的,都要上网查阅或者开了新项目自己尝试一下。耗费了不少时间,也走了不少弯路。
用C++已经三天了,因为是做ACM的关系,逻辑都是面向过程的,总的感觉和C语言的区别并不大。
C++的STL提供了很多现成的模板,合理利用这些模板是我现在要攻克的课题。
queue、stack、map、set、vector。这些数据结构什么时候用,怎么用,怎么去选择他们。
经过几天的使用我对他们也有了一些初步的见解:
queue:先入先出,但我一般使用的是其变种优先队列(priority_queue<int>和priority_queue<int,vector<int>,greater<int> >),这两个队列分别可以优先取出最大元素和最小元素。可以猜测其对自定义变量也可使用,只需要重置运算符或做类似前提准备,同时其应该还有更多的优先条件可以选择或自定义。
优先队列给我的感觉像一个随时在用Linq排序的List<>,其push()的方法对应add()等......但我每次只能读取其表头元素内容,对于能否使用索引器[]来访问其他位置的元素暂时还未尝试过。
stack:先入后出,在一些特殊情况时意外的很好用,虽然要达成这个目的逻辑很简单,要手写也能很快写出来,但stack得便捷在于拥有许多定义好了的方法,在需求时可以直接使用而不用再自己定义。
栈和队列很相近,所以在选择时需要思维很清晰,知道自己接下来要写的逻辑是什么,盲目的使用可能会导致选择错误最后需要大规模重构更或是推翻了重写。
map:曾尝试使用过,但没有成功。给我的感觉有点像字典,都是键值对通过key找vale。但两者可用的方法是否相同还有待考证。
在我觉得我需要使用字典时我会考虑使用map。
set:每个元素只会出现一次,使用次数不多,主要使用其方法count()。通常使用时与其他数据结构同步储存(如计算丑数)。
集合给我的感觉像一个可以快速查询数据结构中所有元素的方法(集合中的count()方法),目前每次使用集合都是为了避免在其他数据结构中储存时出现相同元素的现象,故若其他数据结构有count()方法时我将不会使用集合。感觉集合存在的意义不仅仅只有这个,其他意义还等待我的挖掘。
vector:不定长数组,常常代替数组来使用,其拥有的众多方法让我更愿意选择其而非不能点不出方法的数组。
给我的感觉有点像List<>,但又不同于List<>,很常用的一个数据结构。
......
恩,快中午了,吃饭去~

浙公网安备 33010602011771号