在刷LeetCode中遇到了一些语法问题,在这里记录一下,也希望能对其他人有帮助
1.++i与i++
i++ :先引用后增加
++i :先增加后引用
i++ :先在i所在的表达式中使用i的当前值,后让i加1
++i :让i先加1,然后在i所在的表达式中使用i的新值
2. +=与=+
i+=2相当于i=i+2;
i=+2就是i=2;//这里的+为正号,也可以不写
3.类型转换
看一个例子
int x;
float curr = x/2;//这里相当于两个int型变量相除,得到的结果四舍五入保留整数部分,还是一个int型变量,然后赋值给curr
int x;
int curr = (float)x/2;//这里相当于把x提升成float类型,这样以后x/2的结果就是一个float类型,精度不会丢失
int x;
int curr = (float)(x/2);//这样做x/2的精度会有丢失,这样做会先求x/2,得到一个整数结果;然后讲计算结果提升到float型,这时的精度已经丢失了
4.当循环跳不出来
这个时候要检查两个地方:
1.控制循环的条件是否正确;
2.控制循环的变量是否正确。
5.求绝对值
abs()返回的是整数;
fabs()返回float类型。
6.map使用
map变量想要改变value值,应该采用直接赋值的方法,不能用insert方法,insert不会改变原来的value值。
map_s.insert(pair<char,int>(s[i], i));//map的插入形式
map[key].push_back(value);//key可以是string也可以是int7. iterator
iterator是迭代容器,这样写相当于mv的头指针,iter++则指向下一位- for(map<string, vector<string>>:: iterator iter=mv.begin(); iter!=mv.end(); iter++){
- res.push_back(iter->second);//iter因为指向mv,mv是map类型,first是key,second是value。
- }
8. sort函数的使用
1.一维vector<int>:sort默认对vector进行升序排列(从小到大)
2.对string排序:string中的字母按字典序排列(来自LeetCode 49.Group Anagrams)
3.对vector<string>排序:vector各个元素是按字典序排列的,每个vector元素是string,也是按字典序排列。
4.sort进行降序排列:需要自己写一个函数,放到sort的参数列表中。
bool cmp(int a,int b){
return a>b;//降序排列,如果改成return a<b,则是升序排列。
}
这里的函数名没有要求,但是函数的返回值需要是bool类型。可以把这个函数理解成排序规则, 如果符合规则就返回true,以此为依据进行排序。
5.如果vector中的元素是strut类型(来自LeetCode
56.Merge Intervals)
/**
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
如果对start进行升序排列,那么cmp函数应该这样写:
static bool comp(Interval& a, Interval& b){
return a.start<b.start;//按照start的值进行升序排列,写成return a.start<b.start&&a.end<b.end是按照start和end值的升序排列
}
8.vector.back()和vector.end()区别
end() 函数返回一个指向当前vector末尾元素的下一位置的迭代器.要访问末尾元素,需要先将此迭代器减1。见LeetCode 77.C ombinations
back() 函数返回当前vector最末一个元素的引用。
如果要比较vector最后一个元素与它前一个元素的大小,应该这么写:
if( tem.back()<*(tem.end()-2) )//判断最后一个元素是否小于它前一个元素