最近学习的一些很细节的东西,最近越来越懒了,沉迷看小说,不得行呀。
1、写出一个没有报错的代码是非常困难的,我们需要很注意测试用例的边界条件。
2、c++里面的查找格式一般为 nums.find(target)!=nums.end(),代表查找到的位置是在nums当中,所以存在。
3、vector的查找格式为find(nums.begin(),nums.end(),value)。
4、取反是针对你的数据类型的变量他的范围内的所有数字,并不只是针对数组所在部分。例如00001取反,结果应当是11110而不是00000。
5、很多时候我们利用双指针进行问题的简化,比如对链表或者数组,有时候能够将O(n**2)问题的时间复杂度进行简化。
6、C++模板中typename和class的区别
我们知道在C++Template的定义方法为:template
在模板定义语法中class和typename的作用是完全一样的。但是typename还有另外一个作用:使用嵌套依赖类型。
我们拿STL源码中的一个例子来说
template
typename deque<T, Alloc, BufSize>::iterator
deque<T, Alloc, BufSize>::insert_aux(iterator pos, const value_type& x){…}
我们可以看到这是一个泛型函数,我们可以看到这个函数的返回值是typename deque<T, Alloc, BufSize>::iterator我刚刚看到这个部分的时候,觉得很诧异(可能是因为我很菜),这里的typename的作用就是告诉编译器,这个iterator是一个类型,而不是成员变量或是成员函数。
7、vector具有方法:
(1)empty()
(2)size()
(3)insert()//需要的是内存地址而不是索引。T.insert(T.begin(),1);
(4)erase()//需要的是内存地址而不是索引。
8、数组的初始化是大括号,还有要分清楚char和string,to_string(a),int型转换成string。
9、const放在末尾代表函数不能修改参数,是个只读函数。
10、
int mid=left+((right-left)>>1);(right)
int mid =left+(right-left)>>1;(wrong)
因为移位运算符的优先级太低,会最后才计算,所以一定要用括号括起来,不然会计算错误。