1、当我们提供一个类内初始值时,必须以符号=或者花括号表示。
class a{ vector<int> v[10];//这是错误的,不能指定大小 string s("");//错误; };
必须使用=或者{}
class a{ vector<int> v1 = vector<int> (10); vector<int>v2{1,2,3,4}; string s{""}; };
n个节点,n-1条边的无向图是棵树。
2.将一个字符串转换为可以修改的char数组,或者一个char*指向一个string。必须使用strcpy才可以实现。
string s{"12"}; const char *p1 = s.c_str(); char* p2; strcpy(p2,s.c_str());
3.迭代器失效问题,vector插入删除元素后,原来的迭代器就没用了,再调用就报错,而list的迭代器在插入元素之后,还是指向原来的元素。在STL里,我们不能以指针来看待迭代器,指针是与内存绑定的,而迭代器是与容器里的元素绑定的,删除了之后,该迭代器就失效了,在对其重新赋值之前,不能再访问此迭代器。
vector<int> a{1,2,3};
auto iter = a.begin();
a.insert(iter,100);
这个时候100就被插入到1的位置,iter指向100,1移动到100的后面。
erase()返回删除元素之后的那个元素。
vector,string会失效。
4、常用的algorithm
vector
5、final表示这个类不能被继承,override写在参数之后,花括号之前,对应的必须是虚函数,在继承中必须被重写,不然报错。
6.继承只能使用public和protected的变量,不能使用private的变量。
7.1k=2^10 1M=2^20 1G=2^30 1T=2^40
8,对于栈和queue要使用while,不要使用for
for(int i = 0;i < queue.size();++i){
res += q.top();
q.pop();
}
这里queue的大小在不断变化,这里肯定错误,应该写成while(q.size() > 0);
对于多重循环,自己经常ijk,最后一层循环容易将k写成i。