logo头像

野渡's小小知识乐园

《STL源码剖析》第5章 关联式容器

《STL源码剖析》第5章 关联式容器

所谓关联式容器,观念上类似于关联式数据库,每个元素都有一个键值key和一个实值value。当向容器插入元素时,容器根据其key值将实值放到适当的位置。关联式容器没有头尾的概念,所以也不会有push_front(),push_back()等操作函数。 STL关联容器分为set(集合)和map(映射表)两大类,及其衍生体multiset和multimap。这些容器的底层机制均以RB-tree(红黑树)实现。RB-tree也是一个独立容器,但并不开放使用。 SGI STL还提供一个不在标准规格的关联式容器 hash_table(散列表),以及以 hash_table 为底层机制而完成的 hash_set散列集合、hash_map散列映射表、hash_multiset散列多键集合、hash_multimap散列多键映射表。 本章我们将主要学习各种容器对应的底层实现原理和应该注意的地方。…

《STL源码剖析》第4章 序列式容器

《STL源码剖析》第4章 序列式容器

所谓序列式容器,其中的元素都可序,但未必有序,C++语言本身提供了一个序列式容器array,STL另外再提供vector、list、deque、stack、queue、priority-queue等序列容器。其中stack和queue由于只是将deque改头换面而成,技术上被归类为一种配接器。 本文将主要总结各种序列式容器的实现和用法。…

《STL源码剖析》第3章 迭代器与traits编程技法

《STL源码剖析》第3章 迭代器与traits编程技法

本节主要介绍迭代器和traits编程技法。 迭代器是一种模板class,迭代器在STL中得到了广泛的应用,通过迭代器,容器和算法可以有机的粘合在一起,只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。此外,迭代器本身也是一种设计模式,其设计思想也值得我们仔细体会。 traits编程技法主要是通过模板的类型推导和class内嵌类型定义从而获取并使用迭代器的所指对象的真正类型,比如作为返回值等。…

《STL源码剖析》第2章 空间配置器

《STL源码剖析》第2章 空间配置器

由于整个STL的操作对象都放在容器内,而容器需要配置空间以放置数据,学习空间配置器的原理是掌握其它部分知识的基础。 为什么不说allocator是内存配置器而说它是空间配置器呢?这是因为空间配置器的配置不一定是内存,其实也可以是磁盘或者其他辅助存储介质。我们也可以自己实现空间配置器,只需要自己对应实现相应的标准接口即可。…

3.字典序

给定整数n和m, 将1到n的这n个整数按字典序排列之后, 求其中的第m个数。对于n=11, m=4, 按字典序排列依次为1, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9, 因此第4个数是2.对于n=200, m=25, 按字典序排列依次为1 10 100 101 102 103 104 105 106 107 108 109 11 110 111 112 113 114 115 116 117 118 119 12 120 121 122 123 124 125 126 127 128 129 13 130 131 132 133 134 135 136 137 138 139 14 140 141 142 143 144 145 146 147 148 149 15 150 151 152 153 154 155 156 157 158 159 16 160 161 162 163 164 165 166 167 168 169 17 170 171 172 173 174 175 176 177 178 179 18 180 181 182 183 184 185 186 187 188 189 19 190 191 192 193 194 195 196 197 198 199 2 20 200 21 22 23 24 25 26 27 28 29 3 30 31 32 33 34 35 36 37 38 39 4 40 41 42 43 44 45 46 47 48 49 5 50 51 52 53 54 55 56 57 58 59 6 60 61 62 63 64 65 66 67 68 69 7 70 71 72 73 74 75 76 77 78 79 8 80 81 82 83 84 85 86 87 88 89 9 90 91 92 93 94 95 96 97 98 99 因此第25个数是120……

1.保卫方案

战争游戏的至关重要环节就要到来了,这次的结果将决定王国的生死存亡,小B负责首都的防卫工作。首都位于一个四面环山的盆地中,周围的n个小山构成一个环,作为预警措施,小B计划在每个小山上设置一个观察哨,日夜不停的瞭望周围发生的情况。 一旦发生外地入侵事件,山顶上的岗哨将点燃烽烟,若两个岗哨所在的山峰之间没有更高的山峰遮挡且两者之间有相连通路,则岗哨可以观察到另一个山峰上的烽烟是否点燃。由于小山处于环上,任意两个小山之间存在两个不同的连接通路。满足上述不遮挡的条件下,一座山峰上岗哨点燃的烽烟至少可以通过一条通路被另一端观察到。对于任意相邻的岗哨,一端的岗哨一定可以发现一端点燃的烽烟。 小B设计的这种保卫方案的一个重要特性是能够观测到对方烽烟的岗哨对的数量,她希望你能够帮她解决这个问题。…