cpp coding随笔

最近非常代码郁闷,遇到各种不顺心。写个Huffman,想用二叉树实现,之前的构造二叉树都完成了,当时还记得
夏令营之后和赵王军Acmer交流了一下,他都不用这种notorious的指针,因为总会出bug,就因为null还有一些过于涉及
底层,需要coder去考虑的事情。他用index模拟point,于是我也照做,里面就是n-1次loop,一次要排序,非全部参与的排序,
然后删除两个最小,插入一个,然后要保持删除的以后不能在移动,不然parent的index就找不到他们了。


犹记得当年CM老师课件也说了,HuffmanCode看起来很简单,但是实现不易。几经周折,构造好Tree后,之前计划选个遍历算法
,找到叶子节点就保存huffmancode, 左下加0,返回pop,右下加1,一般是非递归的比较改写一些,但是先序非递归在判断
是否到叶子的逻辑上有点混乱,一直没弄出来,索性不弄了。后来想想还是三叉好,但是parent的位置后面也不能挪。DS全部交换
给CM老师了。。。。




然后又是些一个简单的sort出了奇怪的问题,后来才知道list不可以用algorithm的sort,要用list自己的一个sort,想想也知道,list不能随机访问啊~~

我这个STL用多了,连DS的基础都忘了,到了另一个极端了,这是非常危险的。另外今天突然有个idea,链表的O(nlogn)其实也可以尝试MergeSort的递归版本,因为

MergeSort没有随机访问的要求,而且可以尝试递归看看~~~

另外STL里面都得特别注意,都是[first, end) 这种半开半闭区间,便于iterator写loop直接用!=end表示循环结束。

sort要特别注意,数组还有构造vector都是一样,都是begin是第一个元素,end是最后一个元素的后一个元素。

int a[]={1,2,3}

vector<int> vec(&a[0],&a[3])这样才对,虽然a[3]是越界的= = 但是就要这么初始化容器相关的操作。




另外list的iterator居然不可以+1 操作, 我后来查了stackoverflow有人说他的iterator是双向的,只有++ --操作,这个很不方便啊,
我只想取it+1,结果结果只能it++,导致it值还被修改。。。选list主要是考虑排序之后删除重复,中间不断删除,list方便,但是遇到各种刮三问题。


最后还是vector实现的,也不管那啥效率了= =


而且sort的compare函数又忘了,参数以为是iterator,其实是容器的结构体或者基本数据类型,const node & it,类似这种,返回
bool类型的,sort只能用支持随机访问的,例如vector dequeue string等


另外感觉 C++ 这种 stream一系列的 东西 默认delim 是 space 或者tab
如果 其他的 比如常用的换行符 分割 就要getline 改一下默认delim
fstream stringstream 还有iostream 当初学cin cout的时候 完全 没有想通这个 为啥他都能自动按照 空格 tab 换行都可以正确的分割出我要的数据

另外最近在想为啥一定要iostream,最简单的可以不要么,不cout cin确实可以,但是想起了算法的定义,可以有0个或多个输入,有1个或多个输出的,所以算法必须是有至少一个输出的。所以原则上必须有iostream,然后这个实在std下的,所以接上using names std; 包括string在内的一堆也是std名空间下的。


关于sort的comp函数,qsort就不用写了,基本都有vector可以代替的,sort的comp函数  < 返回 true 表示升序,否则表示降序,记住这个就OK啦~~~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值