- 博客(7)
- 资源 (3)
- 收藏
- 关注
原创 STL-迭代器中的traits
STL-迭代器中的traits STL中算法通过迭代器访问容器时,有时不仅仅需要知道元素是什么,还想用到元素的相应类型(声明一个变量之类)。STL中利用traits编程技巧来实现。它通过在每一种迭代器中声明了类型名。再通过iterator_traits来萃取类型。最终通过iterator_traits来获取类型。 为什么要通过iterator_traits来获取类型?这是因为,原生指针...
2020-02-22 13:14:57 119
原创 unordered_map&&unordered_set
unordered_map&&unordered_set底层实现 在STL中,C++11引入了unordered_map、unordered_set、unordered_multimap、unordered_multimap。尽管不是名字不是哈希表,但是底层仍然是。相比于map等,这个查找的平均时间更加快。看看它的底层实现(l来自《STL源码剖析》)://以下是基于gnu...
2020-02-20 14:51:22 157
原创 Map&&Set
STL- Map&&SetRB_Tree 非公开,这是map,set的底层支撑。它在STL中的实现: struct _Rb_tree_node_base { typedef _Rb_tree_node_base* _Base_ptr;//指向树节点的指针 typedef const _Rb_tree_node_base* _Const_Base_ptr...
2020-02-19 10:00:33 137 1
原创 STL-使用红黑树作为底层的原因简单解释
STL-使用红黑树作为底层的原因简单解释 在C++标准模板库中,map\set\mutimap\mutiset均是以红黑树作为底层来实现的。为什么要以红黑树来实现这些容器呢?二叉搜索树 二叉搜索树(也叫二叉排序树、二叉查找树)。二叉搜索树的定义较为简单。二叉搜索树就是根节点元素与左右子树所有元素的比较关系顺序。具体如大小关系,二叉搜索树就是根节点元素大于左子树的所有元素,小于右子树的...
2020-02-18 09:02:42 472
原创 list
list list,是用环状双向链表实现的。具体的的内存结构如下图: 其中需要解释的地方:1.end()指向的是一空白节点,用以实现STL前闭后开区间。2.前闭后开区间:在STL迭代器中,区间里要访问的元素一般采用[iterator1,iterator2)的表示方法。 一个list类中的数据成员是怎么样的呢?如下(g++,7.2.0)list_node *next;list...
2020-02-11 22:05:19 145
原创 deque
deque文档deque,她的意思为双端队列(double-ended queue)。逻辑上看,deque和vector都是连续空间。相比于vector只能从尾部增长元素,而deque可在双侧增加元素。但是从存储结构上,deque并非是连续空间存储的。它是分段连续的。对于vector存储(申请的内存)的增长,可以描述为三个步骤1.申请内存2.搬移元素3释放原先的使用的内存。而由于deque其特...
2020-02-09 11:38:35 798
原创 vector
vector使用 对于vector,它的存储结构和数组一样,连续空间。对于vector类型,它的数据成员有三个:iterator start;iterator finish;iterator end_of_storage; 其增长方式是两倍增长。由于存储空间连续,vector的迭代器本质上仍然是类型的指针。明白这点,以上三个数据成员就非常好理解。start,finsh分别表示正...
2020-02-08 09:25:21 252
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人