||
大约花了一周时间终于搞懂了set。set代码来源于VASP,http://www.cse.lehigh.edu/~chen/software.htm.
-------------------------------------------
指针就是地址,地址+类型就是数据。 另外地址也可以当成值来使用。
-------------------------------------------
我对源代码set部分进行了提取处理
,只关心set。
--------------------------------------------------
感觉这个set应该是个不完全版本,里面有好多冗余的信息。
----------------------------------------------------
指针构建的数据结构如下图所示
primativesSet * primSet=new primativesSet();
// sz = (set_t) sizeof(set_head_t) + c * sizeof(int) + 2 * tsz * sizeof(int);//origin
sz = (set_t) sizeof(set_head_t) + c + 2 * tsz;//czq
set_t 本来就是int 型的指针,所以加c*sizeof(int)字节没有必要,+c个int 就是+c*sizeof(int)
typedef struct
{
int capacity;
int size; // the num of objs
int table_size;
word_t properties; // unsigned int
ptr_t header;
} set_head_t;
set_head_t 一共占20个字节。
if (properties & SP_MAP) sz += c;//czq
所以sz=(set_t) sizeof(set_head_t) + c + 2 * tsz+c;
2添加数据成员
疑惑1
疑惑1. 这个probe函数不知道什么意思?
在我的测试当中index=id;为什么需要这个函数?
index = probe(ht, bt, cap, tsz, id);// I think index=id;
新开辟的内存的容量是上次的2倍,然后把旧内存中的信息copy到新内存上,同时释放旧内存。
free_set(s); 尚未调试
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-26 19:25
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社