
stl
cylianging
成长,让自己快乐。
展开
-
Effective STL:杂记(一)
1. 避免使用vector<bool> vector<bool>实际上并不能算是一个STL容器,实际上也并不存储bool。因为一个对象要成为STL容器,就必须满足C++标准的第23.1节列出的所有条件,其中一个条件是,如果 c 是包含对象T的容器,而且 c 支持operator[],则必须能够编译下面代码:T *p = &c[0]; 也就是...原创 2019-10-13 18:47:54 · 321 阅读 · 0 评论 -
vector.resize 与 vector.reserve的区别
转自:https://blog.youkuaiyun.com/shuilan0066/article/details/3588478reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新...转载 2019-04-15 11:06:18 · 227 阅读 · 0 评论 -
new(p) T1(value) 的操作
最近开始看《STL源码剖析》,看到空间配置器的时候,发现这么一段代码:template <class T1, class T2>inline void _construct(T1* p, const T2& value) { new(p) T1(value); // placement new. invoke ctor of T1}通过...原创 2019-05-09 21:04:21 · 3929 阅读 · 4 评论 -
STL中的Traits技法记录
看过《STL源码剖析》的人,一定会知道里面讲到的Traits编程技法。刚开始看到书上这部分的介绍的时候,是有点不太理解这个技法的作用的,但是经过网上找资料了解之后,并且反复看了书上的内容之后,才渐渐了解到这个技法的重要性,对于迭代器及泛型思维的重要性。一句话简述这个技法的主要作用,就是:可以通过迭代器的某个操作,直接获取迭代器里面保存的容器的元素类型。如果没有Traits技法,是无法实现这个操...原创 2019-05-27 23:20:02 · 417 阅读 · 0 评论 -
STL各容器底层数据结构总结
看了《STL源码剖析》,对于里面的容器,下面进行了简单的总结。1.vector: 底层使用数组保存。push_back时若已经满了,则会2*n扩展空间,若实际元素数量低于分配空间的1/4,则会将空间回收为原来的一半。《STL源码剖析》里面没有讲到空间的回收,是之前查找资料时看到。调整空间时,是先申请新的空间,然后将旧空间的内容拷贝过去,然后再释放旧的空间。 只适用于快...原创 2019-05-28 19:38:39 · 581 阅读 · 0 评论 -
C++:map、hash_map、unordered_map
面试经常被问的问题之一,便是map和hash_map的区别,以及什么时候用map什么时候用hash_map。另外也了解到还有C++11的unordered_map,所以这里一并介绍三个了。用法就不介绍了,主要介绍区别。1. 三者的区别 map底层是用红黑树实现的,空间复杂度为O(n),是随着节点的增加才增加,而查找的时间时间复杂度则固定是O(log(n))了。因为红黑树本来...原创 2019-07-10 20:39:12 · 6758 阅读 · 0 评论