(1)list源码分析,基于c++ 和vs2019,cpp20标准。结构确实如图,双向环形链表。
(2) 关于list类型变量的初始化思考,如下图:
我们可以如此初始化 list 变量并赋值。但实际上 list 并没有如此直接对应的构造函数。实际编译器的做法是,把{9,10,11} 初始化给了initializer_list类型的变量。如下图:
内存中确实有这样的9,10,11 的数据序列,其起始和终止地址作为指针初始化了 initializer_list 变量。然后再以这个initializer_list 变量来作为实参,来初始化 list 变量,调用如下的 list 构造函数:
这些都是咱们猜测的编译器的编译原理。毕竟没看过c++编译器是怎么编译这些代码的。但咱们可以反汇编验证一下:
可见,代码力确实存在对 initializer_list 的使用。确实是这么构造 list 的。 谢谢
(3)数据结构