数据结构分析
1.Vector
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
- 初始化10h字节空间
- 第一个字段指向一个区域,区域中有一个指针,指向自己(this指针)
- 第二个字段存放数据起始地址
- 第三个字段存放数据末尾的下一个地址
- 第四个字段存放缓冲区末尾地址
2.list
list<int> ls;
ls.push_back(1);
ls.push_back(2);
ls.push_back(3);
- 初始化0Ch字节空间
- 第一个字段指向一个区域,区域中有一个指针,指向自己(this指针)
- 第二个字段指向头节点
- 第三个字段元素个数
3.map
map<int, string> mp;
mp.insert(pair<int, string>(1, "student_one"));
mp.insert(pair<int, string>(2, "student_two"));
mp.insert(pair<int, string>(3, "student_three"));
map是一个二叉树结构:
- 初始化0Ch字节空间
- 第一个字段指向一个区域,区域中有一个指针,指向自己(this指针)
- 第二个字段指向一个没有数据的节点,该节点结构:
- cdcd0101表示红黑树的标志(我也不是很清楚,有兴趣的自行百度)
- 第一个字段: 最左节点(最小值)
- 第二个字段: 根节点
- 第三个字段: 最右节点(最大值)
- 第三个字段是元素个数
4.string
string str="string hello world";
- 初始化1Ch字节空间
- 第一个字段指向一个区域,区域中有一个指针,指向自己(this指针)
- 第2 3 4 5字段:
- 如果字符串长度<16,该16字节保存该字符串
- 如果超过16字节,就会申请一块内存,用于存放字符串,将堆的地址存放在这
- 第六个字段:字符串长度
- 第七个字段:
- 缓存区大小是16字节的整数倍
- 该字段存放可存字符串长度(即缓冲区大小减一)