STL的一些总结
2015-07-05 18:16
281 查看
第一次用这个模板来写,好像还不错~
只是吧SGI的stl刷了一下,做点小结吧。以后有时间有思考后再一点点的记录。
整个STL的基本功就是模板。类模板函数模板,友元模板,模板半特化,模板半有序,模板全特化,ADL等等语言的特性。因为看的是C++98/03版本的,C++11应该有很多的变化了,模板参数可变应该是最大的变化。估计很多实现都重写了,等看了再总结。
关于STL的一点理解:
1 先说说这几个组件之间的关系。
仿函数本质上还是属于算法,只不过由用户提供。适配器只是给iter, container, algo三个组件增加一层外皮。所以根本上说,就是iter , container, algo。
2 iter。
有点像一个glue,突然想起了以前做egl,也是作为3D渲染core和platform 之间耦合的一层。大部分的algo都是用iter的copy ctor来传递的,免不了效率低了些。而且还有可能iter失效,得看container下面是用什么方式进行的变化。
3 container。
很奇怪有了数组,有了链表,有了树,为什么没有图的container?估计图的表示方式复杂?或者图算法不容易总结?不太清楚了。rb树的理解基本都可以推导到某一种情况(子红,父红,祖父黑,伯父黑)的变色加右旋。hash table的bucket用的质数并基本能够保证load factor 小于1. set/multiset/map/multimap用的都是等价而非相等的比较方式less, 而hashset用的是equal_to.
4 algo。
这块基本就是常用算法了。不过有些名字非常混淆,比如remove,只是移动并未删除。
整个stl里面常用的一种技巧就是提取模板参数类的特征, type_traits这样的技术。基本很多算法的性能优化都是通过静态时类对象的特征来判断下一步调用该怎么走。算是template meta program里面的编译时判别吧。这样的技巧还是挺不错的。
只是吧SGI的stl刷了一下,做点小结吧。以后有时间有思考后再一点点的记录。
整个STL的基本功就是模板。类模板函数模板,友元模板,模板半特化,模板半有序,模板全特化,ADL等等语言的特性。因为看的是C++98/03版本的,C++11应该有很多的变化了,模板参数可变应该是最大的变化。估计很多实现都重写了,等看了再总结。
关于STL的一点理解:
1 先说说这几个组件之间的关系。
仿函数本质上还是属于算法,只不过由用户提供。适配器只是给iter, container, algo三个组件增加一层外皮。所以根本上说,就是iter , container, algo。
2 iter。
有点像一个glue,突然想起了以前做egl,也是作为3D渲染core和platform 之间耦合的一层。大部分的algo都是用iter的copy ctor来传递的,免不了效率低了些。而且还有可能iter失效,得看container下面是用什么方式进行的变化。
3 container。
很奇怪有了数组,有了链表,有了树,为什么没有图的container?估计图的表示方式复杂?或者图算法不容易总结?不太清楚了。rb树的理解基本都可以推导到某一种情况(子红,父红,祖父黑,伯父黑)的变色加右旋。hash table的bucket用的质数并基本能够保证load factor 小于1. set/multiset/map/multimap用的都是等价而非相等的比较方式less, 而hashset用的是equal_to.
4 algo。
这块基本就是常用算法了。不过有些名字非常混淆,比如remove,只是移动并未删除。
整个stl里面常用的一种技巧就是提取模板参数类的特征, type_traits这样的技术。基本很多算法的性能优化都是通过静态时类对象的特征来判断下一步调用该怎么走。算是template meta program里面的编译时判别吧。这样的技巧还是挺不错的。
相关文章推荐
- 浅析STL中的常用算法
- STL区间成员函数及区间算法总结
- c++ STL容器总结之:vertor与list的应用
- C++在成员函数中使用STL的find_if函数实例
- 关于STL中list容器的一些总结
- 关于STL中的map容器的一些总结
- 浅析stl序列容器(map和set)的仿函数排序
- STL list链表的用法详细解析
- stl容器set,map,vector之erase用法与返回值详细解析
- STl中的排序算法详细解析
- 关于STL中vector容器的一些总结
- 关于STL中set容器的一些总结
- 简单说说STL的内存管理
- CppUtest发现的STL容器内存泄漏问题
- STL中算法
- STL简单应用
- vector-list-deque
- 三十分钟掌握STL
- 1.sort()
- 刚刚接触到一个STL的函数make_pair()