也算是开始写好玩的代码了
Part1 其实并不算很有难度,但是也犯了一些很蠢的问题。
依旧没有记住要先理解题目
一开始的打算是一个比较精妙的设计,在Node内储存一个deque
用于储存访问记录,将这个node丢入priority_queue
这样就可以自动拿出需要Evict
的对象了,一切都是看上去那么高效和简洁
但是其实储存在pq内的是指针 否则 我们将无法access这个节点,但是储存的是指针的话,我们无法在更新节点后让优先队列进行重排序,因为这个操作对priority_queue
无感的,如果要强行实现的话,则相当于需要重新建堆,相当低效。
二更
结过还是以低效的方式完成了,主要是看到了要求上说明 这一部分是独立的 所以就直接选择了 利用list来储存,在每次Evict前进行sort操作
好玩且奇怪的问题是,在通过Replacer
内的list
的sort之后node
内的 list
会改变 也不知道为什么会这样,已经查看过内存指针并没有变动,但是更神奇的是 莫名其妙打了几个cout
就解决了这个问题,后续则畅通无阻了。代码的尽头真的是玄学ww
整体来说还是比较简单的? 也不需要过多的思考,只是需要遵从指使完成编码即可。不过我感觉好日子要到头咯!后续的任务可能是大项目的一部分,也有benchmark,也估计会有更多的原创性了。
附上通关截图(我也没hidden test 过了就试过了(逃
三更
才发现自己理解错了,并不是独立的项目,而只是不和其他replacer相关,只要单独实现lru-k 算法即可,后续在buffer manage中还是会用到的,阅读Part2 的时候发现了这个审题问题。目前这个情况下,可以保留目前的做法,如果后续遇到性能瓶颈,可能会需要自行实现一个heap,但是由于还有可能涉及扩容和其他问题,复杂度挺大的,暂时优先级并不很高。