重要少 而非多。
7、现在右值析构还有点问题。
6、
拷贝构造和 = 运算符分别什么时候调用
HasPtrMem(const HasPtrMem& h) : d(new int(*h.d))
{
cout << "Copy construct: " << ++n_cptr << endl;
}
HasPtrMem& operator=(const HasPtrMem& h) {
cout << "operator= construct: " << ++n_cptr << endl;
return *this;
}
HasPtrMem a =GetTemp(); //调用构造
HasPtrMem a1;
a1= GetTemp(); //调用重载的赋值。
5、深拷贝
赋值函数考虑 防止自我赋值 的原因是 因为要先释放,不考虑自我赋值的话,可能已经先释放了。
右值就是要用浅拷贝代替深拷贝。
4、earse ,把后面的往前移动,并返回下一个。这个时候的it已经废了,不能再用这个已删除的再it++了,不然会出错。要么重新赋值要么退出。
vector<int>array{100,200,300,400}; for (auto it = array.begin(); it!=array.end();it++) { cout << *it << endl; // if (200 == *it) array.erase(it); } for (auto it = array.begin(); it != array.end(); it++) { cout << *it << endl; if (200 == *it){ array.erase(it);//此时it已经变成下一个的了 // auto newit= array.erase(it); // it = newit; // it--; } }
3、
https://blog.csdn.net/linraise/article/details/20459751
2、已知某序求后面。
必须要有中序
https://www.cnblogs.com/lanhaicode/p/10390147.html
1、一个栈的入栈序列是 a,b,c,d,e,则栈的不可能的输出序列是( ) 。
a) edcba
b) decba
c) dceab
d) abcde
入栈顺序,可以入了还出,只有保证入的顺序是就可以了
c