容器就是我的数据结构。迭代器就是我的判断条件,算法就是我的逻辑主干。哈哈就是这样。这个写法就是我的感悟。

(*(insert(value_type(k,T())).first)).second

鬼才用法啊,map下标去值方法。
利用insert特性,key有点话就插入失败,返回插入失败那个迭代器位置,没有的话,就插入个默认值。
insert(value_type(k,T()))

insert(value_type(k,T())).first 取得返回值是个迭代器

*(insert(value_type(k,T())).first)取得迭代器里数据的类型。

(*(insert(value_type(k,T())).first)).second 取得真正所需的值。

无敌 学到了,利用以值的错误实现现有的逻辑。不亏是stl,一群鬼才。

最近一直在读stl,里边思想真的是启蒙。

  1. 容器定义存储数据的方式
  2. 迭代器定义数据处理的规则
  3. 容器和迭代器都是对数据的管理,彼此之前相互联系。迭代器依照容器行使,容器依照迭代器行使,你中有我,我中有你,彼此分离又联合。真的高端。
  4. 数据可以说是容器和迭代器之间的胶水。
  5. 型别的定义使得算法和迭代器之间联系的变得宽泛。
  6. 型别真的是鬼才设计。假如没有型别。算法就没法真的如此泛型。每个迭代器都定义自己的型别。按照某一种规则表示自己的能力,算法依照能力而不依照某一种具体的实现,算法就是所有已知行为的逻辑组合,根据迭代器的能力不同,用不同的实现,比如迭代器有的迭代器只能一步一步走,有的迭代器却能跑步走。

越读stl源码剖析,越对他的思想痴迷。什么是分,什么是合,什么时候该分,什么时候该合。

  1. 空间分配:将利用重载new将空间的分配和初始化分开,本来一体的东西被分开,带来的结果就是可以分别进行优化,复杂度减低。利用萃取判断一个对象是否需要析构,不需要则节省了一次回收时间。利用内存链表节省了小内存的代价(来自操作系统的标志,内存越小,代价越高)。就连链表结构都是用的内联,内存的高效利用,存储在链表上,内存主要用于寻找下一个节点。分出去整个内存就是对应的值得,一内存两用。
  2. 迭代器设计。利用型别+标签分发。将大量细小的规则分类,将复杂度大量降低。定义五大型别。指针,引用,原值,标签(迭代器移动规则),距离。将具体的数据类型抽象出去。内部只关心彼此的逻辑,而不关心数据的类型特性。标签还利用的继承关系,减少了代码的书写,你书写函数,只需要定义一个最低等级的标签,这样因为所有标签(读,写,单向单步移动,双向单步移动,双向多步移动)都是继承关系,子类自然可以用父类的标签上。
  3. 容器内部的设计。只能说一群天赋高者的游戏。写的太漂量了。看完感触真的深刻。一份代码就写一次。后置++永远调用的是前置++等诸如此类,唯一可惜看完就忘。拆分实在是太清晰了,看完每个模块的书写你能明显感觉,我上我也行,按照如此拆分下,抛出异常安全,单纯从功能上来说。我有把握实现。但是当这些彼此拆分的逻辑组合在一起,你会发现多么了不起的设计。链表里有个函数单纯移动到制定位置之前。但是这减少了多少复杂度,链表插入制定位置有他,链表插入其他链表有他。这里的思想太纯粹了,能拆就拆,每个函数功能是如此单一,所谓复杂的逻辑,就是你函数拆分的不够详细。当拆分的足够细后,每个函数的复杂度都是不高的。组合的逻辑也是不高的。就像建筑一样,一步一步堆积。

看这本书对我感悟很多,但是遗憾也很多,看完后明明感悟很高,但是一会就忘。但是遗忘就遗忘把。我代码风格早就被这本书影响了。

虽然没看完这本书,但是我连第一章写的是啥都已经遗忘,明明眼中还在回荡当初的感悟,但是如果不借助身旁的书,可能连这篇感悟都写不出。以前的我可能会烦操,会迷惘,明明如此努力,明明如此刻苦,但是最后还是春梦无痕。现在的我接受自己的平凡,忘记就忘记吗,或者说我读这本书是啥获取啥吗,平淡就好,看完剧,看个郭德纲相声你不会真的想通过它得到什么吗,得到快乐就足够了,我当初我看懂过,我为此有成就感,我就没白读。况且我的代码风格随之改变了。

最近编写代码深受此影响,原本实现一个功能会注重细节,现在实现一个功能,会注重拆分,假设未实现的函数已实现。先写逻辑,后写组成逻辑的实现。我称自己的这种思路是递归写法,递归不追求具体的实现。依托后续的流程,定好出口,定好逻辑,汉罗塔永远的例子,无论多少,都是将A上所有放到B上,A上最后一个放到C上,再将B移动到C上,就这么简单。将复杂的逻辑委托给未实现的函数,从上层进行逻辑组合,将上层逻辑组合后剩下的函数就是具体的实现。我需要什么+什么 = 完成,那么这个什么如何做,那就是另一个维度的事,每个维度彼此不关心,做好自己就可以,复杂度会降低好多。

我不才,虽然一直想按照如此行事,但目前只能做到,逻辑+判断+数值的分离,我们在考虑一个事情的时候,可以考虑将具体的逻辑除去判断和相对的全局变量,看是否有相同,有就可以抽离,保持逻辑不变,将判断和数值封装起来,具体利用函数还是结构体(多态结构体)泛型传入即可。什么是主,我喜欢以逻辑为主,什么是辅,我喜欢判断为辅,我将很多不同的细节藏于判断里,这里的判断并非if,else,switch而是返回值为bool类型的函数,我喜欢利用lambda代替真实的判断,因为判断能做的太少,他仅仅作为判断,改变起来又会影响整体的逻辑,因此当圈复杂度过高时,我就喜欢将之抽出,函数判断可以内藏私活,将一些状态的改变隐藏其中,改变起来也容易,不会影响整体的逻辑。而且将判断抽离,这也有点泛型编程的味道了,因此当出现逻辑结构相同时我总喜欢把判断和数据抽出,把逻辑当成主干,将逻辑判断函数传入,结构传入。这样就可以根据判断逻辑的不同,数据结构的不同,但是逻辑不变,也就不需要考虑某一部分的安全性。啊类比于容器,迭代器,算法。哈哈。容器就是我的数据结构。迭代器就是我的判断条件,算法就是我的逻辑主干。哈哈就是这样。这个写法就是我的感悟。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值