SiriBlog

siriyang的个人博客


  • 首页

  • 排行榜

  • 标签115

  • 分类37

  • 归档320

  • 关于

  • 搜索

C++编程遇到的问题

发表于 2020-05-02 更新于 2021-10-29 分类于 计算机 , 技术 , C/C++ 阅读次数: Valine:
本文字数: 1.3k 阅读时长 ≈ 1 分钟

2020.05.02

Note1

  今天在刷LeetCode的时候,想求两个vector长度只差是否大于一,结果遇到点问题。

  一开始写成这样:

1
2
if(abs(n.size()-c.size())>1)
return "";

  结果报错说没有找到对应的abs函数,就感觉很迷,于是又准备手动计算差值绝对值:

1
2
if((n.size()-c.size())>1 || (c.size()-n.size())>1)
return "";

  结果当两个向量长度分别为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
2
3
4
int ns=n.size();
int cs=c.size();
if((ns-cs)>1 || (cs-ns)>1)
return "";

Note2

  将vector<char>转换为string的几种办法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
std::vector<char> data;
std::string res;

//方法一
for (int i = 0;i<data.size();++i) {
res+=data[i];
}
std:cout << res;

//方法二
res.insert(res.begin(), data.begin(), data.end());
std::cout << res;

//方法三
const char* s = &(data.begin());
res = std::string(s, data.size());
std::cout << res;

//方法四
res.assign(data.begin(), data.end());
std::cout << res;

  将string转换为vector<char>的几种办法:

1
2
3
4
string ch = "what a fucking day!";
vector <char> ta;
ta.resize(ch.size());
ta.assign(ch.begin(),ch.end());
-------- 本文结束 感谢阅读 --------
相关文章
  • OpenCV3使用中遇到的一些问题
  • Qt使用中遇到的一些问题
  • 基于Qt的工业名牌识别系统遇到的问题
  • VisualStudio一个解决方案中创建多个项目
  • C/C++数据输入练习
觉得文章写的不错的话,请我喝瓶怡宝吧!😀
SiriYang 微信支付

微信支付

SiriYang 支付宝

支付宝

  • 本文标题: C++编程遇到的问题
  • 本文作者: SiriYang
  • 创建时间: 2020年05月02日 - 17时05分
  • 修改时间: 2021年10月29日 - 18时10分
  • 本文链接: https://blog.siriyang.cn/posts/20200502171115id.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
学习笔记 C/C++
考研复试口语高频话题
2020华为云大数据挑战赛-热身赛(2)
SiriYang

SiriYang

努力搬砖攒钱买镜头的摄影迷
320 日志
33 分类
88 标签
RSS
GitHub E-Mail
Creative Commons
Links
  • 友情链接
  • 作品商铺

蜀ICP备19008337号 © 2019 – 2025 SiriYang | 1.7m | 25:41
0%