C++语法易错点(不断更新中)

在刷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也可以是int

7. iterator

      iterator是迭代容器,这样写相当于mv的头指针,iter++则指向下一位 

  1. for(map<string, vector<string>>:: iterator iter=mv.begin(); iter!=mv.end(); iter++){  
  1.             res.push_back(iter->second);//iter因为指向mv,mv是map类型,first是key,second是value。  
  1.         }  

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。
back() 函数返回当前vector最末一个元素的引用。
见LeetCode 77.C ombinations 

如果要比较vector最后一个元素与它前一个元素的大小,应该这么写:

if( tem.back()<*(tem.end()-2) )//判断最后一个元素是否小于它前一个元素





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值