9.3总结 第1篇
对于单迭代器的erase函数,如果传入了尾迭代器,则行为未定义,在VS2017下,表现为程序崩溃。这也很容易理解,因为传入单迭代器就是要删除元素呀,但是end()所指的内容,并不是容器内部,所以会报错。
erase传入迭代器范围的之后,返回的就是第二个迭代器,因为迭代器范围属于左闭合区间,表示范围的第二迭代器并不属于范围内部,所以返回的就是它了
3.虽然erase会返回删除的元素之后迭代器,但是pop_front,pop_back返回的void,所以如果在使用pop_front,pop_back,还要使用删除的元素话,需要提前保存。
9.3总结 第2篇
实二次型的规范形
1处:由上一节的定理1得来的。
2处:由二次型等价知,将X用CX代入中的矩阵C必须是可逆的,我们这里可以说2中对应的矩阵C是可逆阵,它的格式是:
系数为0的,可以视作是x_i用x_i代入,其中i=r+1,\dots,n。
定理1
1处:标准形的非0系数个数和矩阵A的秩是相同的,而规范形的非0系数和标准形的非0系数个数是相同的。
2处:参看节的命题2
定义1
注意上面的r等于二次型矩阵A的秩,即二次型X'AX中矩阵A的秩。
命题1
这个不难理解,因为n元二次型X'AX的标准形和对应的规范形的正项系数个数和负项系数个数是相同的,而二次型的规范形是唯一的,因此命题1得证。
定理2
1处:证明\implies:假定X'AX的规范形是x_1^2+\dots+x_p^2-x_{p+1}^2-\dots-x_{r}^2,那么由等价的传递性可得X'AX的规范形也是x_1^2+\dots+x_p^2-x_{p+1}^2-\dots-x_{r}^2。\impliedby显然得证。
2处:显然得证。
定理3
1处:域F上n元二次型X'AX \cong X'BX当且仅当A \simeq B,由定理2得它们有相同的正惯性指数。
2处:合同是一个等价关系,这里是说当秩和正惯性指数确立时,就能确立{n级实对称矩阵}上基于合同关系的一个等价类。
正定二次型的定义
定理1
正定矩阵的定义
定理2
1处:这是由X'AX的规范形为x_1^2+\dots+x_n^2当且仅当X'AX是正定的当且仅当n级实对称矩阵A是正定矩阵,及二次型等价当且仅当它们的二次型矩阵合同得来的。
2处:节推论1 合同标准形
并联系二次型等价当且仅当它们的二次型矩阵合同。
3处:节推论1
定理3
由于时间关系,老师没有细讲这个定理。
n元实二次型半正定(负定,半负定)的定义
9.3总结 第3篇
list
forward_list
不合法,会产生未定义的行为,因为++的优先级比*高,所以iter会先++,再解引用,所以可能导致iter++访问到end(),此时解引用会导致未定义的行为。
在VS2017下程序无法运行,可能的原因是,在插入新元素后,重新分配了存储空间,所以原来的迭代器失效了。
语句没有花括号,所以在while语句下只有if语句,这里iter没有任何++操作,所以程序是一个死循环
2.如果我们为程序添加了花括号,程序依旧是一个死循环,因为插入元素之后,iter为新插入元素的迭代器,所以++iter,只会回到原来的iter。这样只要遇到一个奇数,while就会出现死循环。
修改后的代码格式为:
9.3总结 第4篇
2.对于vector,string,添加元素有可能导致迭代器,指针,引用失效。为什么是有可能,因为添加元素,有可能导致存储空间重新分配,一旦重新分配那么之前的迭代器,指针,引用将会失效。
但是如果没有重新分配内存,那么插入位置之后的迭代器,指针,引用会失效,但是插入位置之前的不会。
3.对于deque,在其他位置插入元素会导致迭代器、指针,应用失效,但是在首尾插入元素,只会导致迭代器失效,指针和引用不会。