2020.05.02
Note1
今天在刷LeetCode的时候,想求两个vector
长度只差是否大于一,结果遇到点问题。
一开始写成这样:
1 | if(abs(n.size()-c.size())>1) |
结果报错说没有找到对应的abs
函数,就感觉很迷,于是又准备手动计算差值绝对值:
1 | if((n.size()-c.size())>1 || (c.size()-n.size())>1) |
结果当两个向量长度分别为3,2的时候每次判定条件都是true
,然后给我返回一个空值。将(n.size()-c.size())>1
和(c.size()-n.size())>1
结果输出,发现一个是0,一个是1。为0的那个确实正确,但是为什么后面那个会变成1呢,(2-3)>1
不应该是false
吗。于是我进一步将c.size()-n.size()
输出,结果输出值并不是我预期的-1,而是一个很大的正数。
到这里我恍然大悟,使用size()
函数返回的是一个size_t
类型的数据,其本质是unsigned int
,即一个无符号型整数,如果数值上相减为负数,则实际会变为一个很大的正数。
最终我采用下面的方法进行计算,避免上述问题:
1 | int ns=n.size(); |
Note2
将vector<char>
转换为string
的几种办法:
1 | std::vector<char> data; |
将string
转换为vector<char>
的几种办法:
1 | string ch = "what a fucking day!"; |