无题

很久没有写过博客了,不知道这篇算什么类型的。是技术的,还是心情的呢。

今天终于算是看完了《STL 源码剖析》。写的最后一份代码是 红黑树的实现。
在C++14 的标准看来,这本书有些内容感觉还是过时了。如果有右值引用和匿名函数的话,也许模板还有更牛逼的玩法吧。

我毕业了,学生时代写点什么东西就迫不及待拿出来分享(装逼)的心情反而没有了。
了解到更多的技术,了解到更多的知识,才发觉,真是学无止境。

简单记录一下没有写在博客内后面的内容吧。

关系型容器,有map、 set、 multi_map、 multi_set。这些关系型数据库都是以 红黑树作为底层实现的。

在非C++ 标准之外,还有以hash table 作为底层实现的关系型数据库。
二者的区别,在于 红黑树实现的键值是有序的,而哈希表实现的键值是无序的。

不管实现如何,目的是让容器能够满足在可承受的范围内快速查找元素。

红黑树的实现比较有意思的一点是 ,数据结构的设置。
为了避免各种情况下的边界检查,红黑树有一个头结点,它的left 指向最小元素,right 指向最大元素,parent 指向根节点。

struct rb_node
{
    rb_node* left;
    rb_node* right;
    rb_node* parent;
};


header->left = min_key;
header->right = max_key;
header->parent = root;

当没有根节点的时候,left 和right 都指向它自己。

而STL 的hash table 是以开区间的方式组织数据结构。
但是,它还是设有阈值的,如果元素接近容器的二分之一时,就重新排列元素。
STL 还为标准类型和字符串提供了哈希函数。
这一点还是要注意到的,如果你想为某种类型做哈希时,要提供它的哈希函数。

后面的内容依次是算法、仿函数、迭代器、配接器等。
了解这些,对于设计API 还是有种不一样的感觉。


技术的技能树要怎么点亮,还是有点纠结的。
只是熟悉C++,不够。

语言只是表达逻辑的工具,重要的还是表达的能力,和本身的能力。

往后我想做什么呢。

希望自己在大数据、人工智能、机器学习、图形学、视觉等方面有所拓展吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值