布隆算法
2016-05-17 22:43
701 查看
Bloom filter简介
Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员。如果检测结果为是,该元素不一定在集合中;但如果检测结果为否,该元素一定不在集合中。因此Bloom filter具有100%的召回率。这样每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况,可见 Bloom filter是牺牲了正确率和时间以节省空间。
以上文字来源百度百科
Bloom Filter计算方法
如需要判断一个元素是不是在一个集合中,我们通常做法是把所有元素保存下来,然后通过比较知道它是不是在集合内,链表、树都是基于这种思路,当集合内元素个数的变大,我们需要的空间和时间都线性变大,检索速度也越来越慢。 Bloom filter 采用的是哈希函数的方法,将一个元素映射到一个 m 长度的阵列上的一个点,当这个点是 1 时,那么这个元素在集合内,反之则不在集合内。这个方法的缺点就是当检测的元素很多的时候可能有冲突,解决方法就是使用k 个哈希 函数对应 k 个点,如果所有点都是 1 的话,那么元素在集合内,如果有 0 的话,元素则不在集合内。
Bloom Filter优点缺点
优点
插入时间和查询时间都是常数。保存的不是数据本身,安全性好。
缺点
插入的元素越多,错判性越大。不能删除元素。
图示说明
例如我们有一个简单的Bloom Filter结构如下:(所有位都是0)[ 0 0 0 0 0 0 0 0 0 0 ]
第一次插入
a用两个哈希函数,映射到
1 4位置上,变为1.
[ 1 0 0 1 0 0 0 0 0 0 ]
第二次插入
b同样的hash函数,映射到
1 8位置上, 变为1.
[ 1 0 0 1 0 0 0 1 0 0 ]
这样就存放了
a b两个元素,当我们查找
a是否在的时候,两次hash找到
1 4位置,发现同时为 1。则表明
a存在。
但是假如我们查找的
d哈希后映射到
4 8位置,发现也同时为 1. 认为存在,这就出错了,因为现在里面只存放了
a b没有
d。
下面写下我用C++写的代码实现,比较简单的实现了下,具体的Hash算法我都简略的写了。
首先是头文件
Header.h
<code class="language-C++ hljs axapta has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="background-color: rgb(255, 255, 255);"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Header.h</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// BloomFilter</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Created by Alps on 15/3/19.</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Copyright (c) 2015年 chen. All rights reserved.</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//</span> <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#ifndef BloomFilter_Header_h</span> <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#define BloomFilter_Header_h</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">BitMap</span>{</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>: BitMap(){ bitmap = NULL; size = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; } BitMap(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> size){ bitmap = NULL; bitmap = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span>[size]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (bitmap == NULL) { printf(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ErroR In BitMap Constractor!\n"</span>); }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{ memset(bitmap, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0</span>, size * sizeof(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span>)); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>->size = size; } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> initBitMap(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> size){ bitmap = NULL; bitmap = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span>[size]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (bitmap == NULL) { printf(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ErroR In BitMap Constractor!\n"</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{ memset(bitmap, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0</span>, size * sizeof(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span>)); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>->size = size; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>->size; } } <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/* * set the index bit to 1; */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> bitmapSet(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>){ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> addr = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> addroffset = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>%<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>; unsigned <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> temp = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x1</span> << addroffset; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (addr > (size+<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{ bitmap[addr] |= temp; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; } } <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/* * return if the index in bitmap is 1; */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> bitmapGet(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>){ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> addr = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> addroffset = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>%<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>; unsigned <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> temp = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x1</span> << addroffset; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (addr > (size + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> (bitmap[addr] & temp) > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> ? <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> : <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; } } <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/* * del the index from 1 to 0 */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> bitmapDel(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>){ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (bitmapGet(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>) == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> addr = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> addroffset = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>%<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>; unsigned <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> temp = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x1</span> << addroffset; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (addr > (size + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{ bitmap[addr] ^= temp; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span>: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *bitmap; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> size; }; <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#endif</span> </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">11</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">12</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">13</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">14</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">15</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">16</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">17</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">18</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">19</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">20</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">21</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">22</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">23</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">24</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">25</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">26</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">27</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">28</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">29</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">30</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">31</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">32</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">33</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">34</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">35</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">36</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">37</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">38</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">39</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">40</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">41</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">42</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">43</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">44</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">45</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">46</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">47</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">48</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">49</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">50</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">51</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">52</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">53</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">54</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">55</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">56</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">57</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">58</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">59</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">60</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">61</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">62</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">63</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">64</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">65</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">66</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">67</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">68</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">69</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">70</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">71</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">72</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">73</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">74</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">75</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">76</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">77</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">78</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">79</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">80</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">81</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">82</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">83</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">84</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">85</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">86</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">87</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">88</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">89</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">90</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">91</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">92</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">93</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">94</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">95</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">96</span></li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">11</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">12</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">13</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">14</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">15</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">16</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">17</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">18</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">19</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">20</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">21</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">22</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">23</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">24</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">25</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">26</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">27</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">28</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">29</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">30</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">31</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">32</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">33</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">34</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">35</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">36</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">37</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">38</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">39</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">40</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">41</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">42</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">43</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">44</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">45</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">46</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">47</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">48</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">49</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">50</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">51</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">52</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">53</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">54</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">55</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">56</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">57</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">58</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">59</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">60</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">61</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">62</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">63</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">64</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">65</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">66</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">67</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">68</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">69</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">70</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">71</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">72</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">73</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">74</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">75</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">76</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">77</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">78</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">79</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">80</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">81</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">82</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">83</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">84</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">85</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">86</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">87</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">88</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">89</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">90</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">91</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">92</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">93</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">94</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">95</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="background-color: rgb(255, 255, 255);">96</span></li></ul>
头文件保存好,放到工程路径下。
下面是
BloomFilter.cpp文件了。
<code class="hljs cpp has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="background-color: rgb(255, 255, 255);"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// main.cpp</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// BloomFilter</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Created by Alps on 15/3/18.</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Copyright (c) 2015年 chen. All rights reserved.</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//</span> <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <iostream></span> <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include "Header.h"</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">namespace</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">template</span> <<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> Type> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> BloomFilter{ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>: BloomFilter(); BloomFilter(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> length){ bitmap.initBitMap(length); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>->length = length; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> Add(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> Type &T); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> Contains(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> Type &T); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> HasH(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> Type &T); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span>: BitMap bitmap; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> length; }; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">template</span> <<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> Type> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> BloomFilter<Type>::HasH(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> Type &T){ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> temp = (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>) T; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> temp%length; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">template</span> <<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> Type> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> BloomFilter<Type>::Add(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> Type &T){ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> first = HasH(T); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> second = HasH(first); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (bitmap.bitmapSet(first) && bitmap.bitmapSet(second)) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">template</span> <<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> Type> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> BloomFilter<Type>::Contains(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> Type &T){ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> first = HasH(T); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> second = HasH(first); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (bitmap.bitmapGet(first) && bitmap.bitmapGet(second)) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> main(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> argc, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> * argv[]) { BloomFilter<<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>> bloom(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>); bloom.Add(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (bloom.Contains(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>)) { <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"true\n"</span>); }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{ <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"false\n"</span>); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (bloom.Contains(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)) { <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"true\n"</span>); }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{ <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"false\n"</span>); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; }</span></code>
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- 我投了份简历,接到了十八个骚扰电话
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解