lesson18:   
一、   
1.list是一个XX链表(0:19:26)  
2.链表里面,单独存储数据最适合的结构是XX(0:19:53)  
3.list的任意位置插入删除的时间复杂度是O(N)吗?(0:20:20)  
4.为什么list容量相关的接口这么少?(0:23:40)  
5.emplace_back的功能和XX一样(0:24:7)  
6.emplace_front的功能和XX一样(0:24:13)  
7.范围for的底层就是XX(0:26:38)  
8.为什么它没有find?(0:33:32)  
9.insert(pos,30),插入后pos会失效吗?(0:37:45)  
a.为什么?(0:38:20)  
b.可以用pos对当前结点的值进行修改吗?(0:39:10)  
10.erase(pos),删除后pos会失效吗?(0:42:35)  
11.splice的作用(0:45:18)  
a.转移所有的元素吗?(0:45:54~0:46:7)  
b.举例理解(0:46:30~0:47:18)   
12.remove是删除所有的元素还是留一个元素?(0:48:40)  
13.clear的作用(0:51:25)  
14.unique的作用(0:52:4)  
a.前提(0:52:9)  
b.真要去重的话,会用unique吗?(0:53:27)  
15.双向链表逆置的话,简单不?(0:54:34)  
16.为什么list还要单独创建一个sort接口?(0:57:34)  
a.如果我用算法库的sort会发生什么?(0:58:04)  
b.链表的sort用的什么排序?  
①可以用冒泡排序吗?(1:0:24)  
②可以用插入排序吗?(1:0:40)  
Ⅰ.单链表可以用插入排序吗?(1:0:50)  
③它用的什么排序?(1:1:9)  
Ⅰ.这种排序对数组的缺陷是什么?(1:1:34)  
Ⅱ.对链表呢?(1:1:50)  
c.N个数据需要排序,你会选择vector+算法sort还是list+sort?(1:3:29)  
①验证(1:7:37)  
②快排和归并的时间复杂度都是O(N*logN),所以它俩的结果几乎一样吗?(1:9:5)  
③建议用链表排序吗?(1:10:28)  
④list拷贝到vector排序后拷回list和list+vector比较效率(1:12:20)  
17.merge的作用(1:13:10)  
二、list的模拟实现   
1.什么是link_type?(1:31:14)  
2.get_node是什么?(1:33:34)  
a.list_node_allocator::allocate是什么?(1:33:27)  
①内存池申请的结点除了开辟空间外,调用了构造和析构函数吗?(1:33:44)  
②如果内存不是来自new,而是来自内存池,我想初始化但是调不了构造函数,有办法让我调用构造函数吗?(1:34:45~1:35:25)  
Ⅰ.销毁结点呢?(1:35:51)  
三、结点的成员变量(1:37:45)   
四、链表的成员变量   
1.C++如何typedef结点名?(1:38:5)  
2.成员变量里有哨兵卫吗?(1:38:27)  
五、链表的构造函数   
1.头节点怎么初始化?(1:39:20~1:39:50)  
六、push_back   
1.需要找到并定义尾结点tail吗?(1:43:25)  
2.如何利用结点的构造函数创建新结点?(1:44:28~1:45:10)  
a.那我要是不传参x,想让它默认给我生成一个,怎么修改构造函数?(1:45:30)  
3.实现(1:46:50)  
七、   
 
1.能不能像string、vector那样用原生指针遍历链表?  
a.node*解引用后是数据吗?(1:51:3)  
b.node*++能到下一个结点吗?(1:51:55)  
c.如何解决上面两个问题?(1:52:40~1:53:0)  
2.建议把两个结点和链表两个类写成内部类吗?(1:54:10)  
3.链表的迭代器是怎么typedef得来的?(1:56:15)  
4.__list_iterator是什么?(1:56:45)  
八、迭代器   
1.list类如何使用迭代器?(2:2:8)  
2.迭代器需要控制哪些行为?  
a.第一个(2:5:30)  
b.第二个(2:7:44)  
c.第三个(2:9:30)  
3.迭代器需要提供析构函数吗?(2:32:38)  
九、begin(2:3:45)   
十、end(2:3:45)   
十一、operator!=   
1.可以在__list_iterator类内部typedef吗?(2:5:58)  
2.链表的迭代器比较是否相等,怎么比?(2:6:19)  
3.it指向_node是用.还是->?(2:11:35)  
十二、operator*   
1.实现(2:8:20)  
2.*it被转换成了XX(2:8:35)  
十三、operator++   
1.这是前置还是后置++?(2:9:40)  
2.++到下一个结点的思路?(2:9:55)  
3.实现(2:10:25)  
4.这是赋值吗?(2:14:43)  
list<int>::iterator it = it.begin();  
5.后置++怎么和前置++区分?(2:35:8)  
a.实现(2:35:30)  
①为什么不写拷贝构造?(2:35:24)  
十四、operator--   
1.实现(2:35:50)  
2.后置--的实现(2:36:10)  
十五、   
1.指针什么时候才用箭头->?(2:38:38)(2:39:15)  
a.->是用来干嘛的?(2:39:18)  
2.对于list<Pos> lt,怎么push_back?(2:41:10)  
struct Pos
{
	int _a1;
	int _a2;
	Pos(int a1 = 0; int a2 = 0)
		:_a1(a1)
		, _a2(a2)
	{}
};  
3.报错的原因(2:43:20)  
 
a.解决方案?(2种)  
①第一种(2:43:28)  
②第二种(2:43:50)  
③第三种(2:46:0)  
Ⅰ.直接用it->是会报错的,需要XX(2:46:25)  
b.如何实现重载->?(2:50:0)  
①&(operator*())等价于XX(2:50:15)  
②返回值是返回什么?(2:50:25)  
c.严格来说,it->_a1其实等价于XX(2:51:20)  
①it->转化成调用XX(2:51:40)  
Ⅰ.返回值返回什么?(2:51:52)  
Ⅱ.T*是结构体的XX(2:51:59)  
Ⅲ.T*再加个XX就可以访问成员了(2:56:2)  
②语法为了可读性,做了什么?(2:52:35)  
4.如果我使用Func(lt),把对象传给函数去遍历,可以吗?(2:56:43)  
 
a.为什么?(2:56:46~2:57:0)  
b.怎么办?(2:57:5)  
c.普通迭代器和const迭代器真正的区别在于是否可以修改数据,那么通过控制哪里可以起到控制是否能够交换数据?(2:59:0)  
①返回值不同,可以构成重载吗?(2:59:41)  
d.怎么解决?(2种)  
①第一种(2:59:51~3:0:10)  
②第二种(3:0:20~3:3:5)  
5.怎么修改迭代器的typedef?(3:4:0)(3:5:27)  
a.普通迭代器的begin和const迭代器的begin的区别?(3:4:31)  
十六、insert   
1.实现(3:12:15)  
2.push_back怎么复用insert?(3:14:8)  
十七、push_front   
1.实现(3:14:35)  
十八、erase   
1.assert警告什么?(3:15:38)  
2.实现(3:17:15)  
十九、pop_back   
1.实现(3:17:55)  
二十、pop_front   
1.实现(3:18:20)  
二十一、find   
1.为什么使用find函数前,要加一堆typedef?(3:23:40)  
 
 
 
lesson19:   
一、拷贝构造   
1.编译器默认生成的拷贝构造是XX拷贝(0:3:32)  
a.lt存的是什么?(0:3:54)  
vector<int> lt;  
b.浅拷贝拷的啥?(0:4:8)  
c.a、b问题的可视化(0:4:45)  
 
d.编译器默认生成的拷贝构造对内置类型XX,对自定义类型XX(0:5:13)  
e.为什么没有崩溃?(0:7:58)  
f.修改会导致崩溃吗?(0:9:22)  
二、clear   
1.clear和析构的区别(0:11:19)  
2.删除节点的时候,除了用delete外,还有XX(0:12:34)  
a.erase以后,节点所在的迭代器就失效了,怎么由该节点指向下一个节点?(0:12:55)  
三、析构函数   
1.实现(0:15:10)  
四、拷贝构造   
1.传统写法  
a.思路(0:17:55)  
2.现代写法  
a.思路(0:18:13)  
b.它只能传链表的迭代器区间来构造吗?(0:19:14)  
 
①实现(0:22:0)  
Ⅰ.push_back的前提(0:20:20)  
Ⅱ.empty_init函数的实现(0:22:5)  
Ⅲ.empty_init的作用(0:22:25)  
c.实现(0:25:0)  
①为什么都交换了,还要在交换前对this对象初始化?(0:31:44)  
五、swap函数   
1.链表的swap是在交换什么?(0:25:34)  
2.实现(0:25:35)  
六、operator=   
1.实现(0:33:40)  
七、   
list lt;  
1.可以这样写吗?(0:36:27)  
2.类名是类型吗?(0:36:37)  
3.什么是类型?(0:36:40)  
4.在哪里的时候,类名可以当成是类型?(2处)  
a.第一处(0:37:3)  
b.第二处(0:37:19)