基础小知识总结

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。

 

posted @ 2018-01-15 11:06  zqlucky  阅读(190)  评论(0编辑  收藏  举报