最近写hashtable的实现的时候用模板类的思想,在普通int,long,double类型的时候测试时没问题的,当用到string的时候,一直有问题。

  实现的equal函数是比较粗暴的使用两者所有对应内存字节是否相似来比较的。

    bool equal(T a,T b){//用内存中字节的方法判断这块内存的对象的值是否相等,这样就不用关心结构内部的数据类型了
char *aCurret,*aEnd,*bCurret;
aCurret=(char *)&a;
aEnd=aCurret+sizeof(T);
bCurret=(char *)&b;
while((*aCurret==*bCurret)&&(aCurret!=aEnd)){
aCurret++;
bCurret++;
}
if(aCurret==aEnd)return true;
else false;
}

   我开始分析两者的数据结构是否相同的

struct data{
int a,b,c;
int x;
string str;
};
        temp.a=temp.b=temp.c=;//string("213");
temp.x=i*;
temp.str=string("");

两个赋成一样的值,由于sizeof(data)=48

分别观察结构体1(0012FB3C),和结构体2(0012FB6C)的差别

整数部分都一样,而string的部分开始不同

为什么string一样的值,会不同,原因应该是string的数据结构的问题

    a=string("");
b=string(""); printf("%d\n",sizeof(a));
printf("%d\n",sizeof(b));

再一测,果然有问题,打印结果都是32,相当于这里的32个字节里保存了一些基本信息,但是文字内容都放在了其他的地方!!!

可以明显的看到a,b的差别

如果字符短的话,string就把字符串放到buf里,buf占16个字节,而如果字符串比较长的话,就把字符串放到_Ptr所指向的内存里

_Mysize记录当前字符串的大小,_Myres记录当前动态的内存结束点(0开始)

最新文章

  1. intellij idea 12 编码不可映射字符
  2. Win7 U盘安装Ubuntu16.04 双系统详细教程
  3. 1250 Super Fast Fourier Transform(湘潭邀请赛 暴力 思维)
  4. AUTOIT解决域控普通用户以管理员身份安装软件方法
  5. java名词解释
  6. git管理工具的使用教程
  7. 找啊找啊找GF
  8. NGUI 3.5教程(六)Font字体
  9. delphi参数传递
  10. Powershell profile.ps1 cannot be loaded because its operation is blocked by software restriction policies
  11. Java ------------获取不会重复的随机数
  12. Java基础笔记-多线程
  13. CodeForces 384C Milking cows
  14. Python 接口测试(三)
  15. install g++ on windows
  16. Python学习笔记6
  17. HDMI转MIPI DSI芯片方案TC358870XBG
  18. 浅析Python多线程
  19. oracle ORA-00917: missing comma 是因为少逗号
  20. 关于Java中static关键字的用法以及从内存角度解析

热门文章

  1. CentOS7 LDAP 2.4 安装配置
  2. Ubuntu 无法获得锁
  3. 七种常见经典排序算法总结(C++)
  4. SC用法
  5. [sqlite] 判断表、视图是否存在及常用C#操作语句
  6. 关于px em rem的一点小总结
  7. C++面向对象高级编程(三)基础篇
  8. Django-RestfulFramework --- DRF
  9. encodeURI()和encodeURIcomponent()的共同点和不同点
  10. ios 10.3下载 Xcode8配置支持 ios 10.3下载