C++:关于string

刷LeetCode的时候明明自己写的算法思路和题解一样,但是运行却速度慢了几倍,内存消耗谜之巨大,找了半天原来是数据结构和赋值运算的问题。这次踩坑了赶紧记下来,防止以后再出现类似的问题。

用string处理char类型数据

string是C++中最适合处理处理字符型数据的容器,直接用就行,不要试图使用vector<char>之类的东西,否则速度和内存占用性能都会下降。

用+=拼接string

在C++Primer在复合赋值运算符一节中有这样一段话:“任意一种复合运算符都完全等价于普通运算符加赋值运算,唯一的区别是左侧运算对象的求值次数:使用复合运算符只求值一次,使用普通的运算符则求值两次。这两次包括:一次是作为右边子表达式的一部分求值,另一次是作为赋值运算的左侧运算对象求值。其实在很多地方,这种区别除了对程序性能有些许影响外几乎可以忽略不计。”

但是对于string来说,这种影响往往不能忽略不计,当需要拼接字符串是,要使用+=而不要分开使用+和=。如书中所说,一个string对象可能占用空间比较大,对其进行处理时要尽可能避免拷贝行为。当我们使用+=时,我们直接将+=右侧的string拼接到左侧的string之后,一步完成,没有额外开支;而当我们分别使用+和=时,首先需要计算=右侧带有+的表达式,这个表达式的结果是一个临时量string,之后再通过赋值运算将这个临时量拷贝给左侧的string对象。一来二去,内存消耗也大了,速度也降了,得不偿失。

另外,使用string类的成员函数append连接两个string的效果和+=是完全一样的。因为string类对于+=运算符的重载实际上就是调用了其append成员函数:

    basic_string& operator+=(const basic_string& _Right) { // append _Rightreturn append(_Right);}

append有不少重载版本,有时间可以研究一下。

C++:关于string相关推荐

  1. Java知识——精华总结

    Java知识--精华总结 一.java概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 为了使计算机能够理解人的意图,人类就必须 ...

  2. mybatis查询报错:com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from string

    mybatis查询报错: com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from strin ...

  3. Go 学习笔记(60)— Go 第三方库之 go-redis(初始化 redis、操作 string、操作 list、操作 set、操作 hset)

    1. 第三方库 go-redis 因为 Go 标准库中是没提供 redis 的库,所以我们选择用 go-redis 这个第三方库.源码地址为 https://github.com/go-redis/r ...

  4. Redis 笔记(03)— string类型(设置key、获取key、设置过期时间、批量设置获取key、对key进行加减、对key值进行追加、获取value子串)

    字符串 string 是 Redis 最简单的数据结构.Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据.不同类型的数据结构的 ...

  5. python中的raw string的使用

    背景 我们经常需要使用raw string,在应用过程中,比如要使字符串中带一些转义字符或者其他的一些符号,我们就需要保持我们的字符成为raw string. 实例 输入 s = 'fadfafa\n ...

  6. Java中如何实现Date与String之间的数据类型转换

    String 数据类型转换成 Date String inputDate = "2021-04-11";Date outputDate = null;SimpleDateForma ...

  7. C++ string字符串的比较是否相等

    C++ string字符串的比较是否相等 可以使用compare 也可以使用"==" 1 使用比较运算符 == #include <iostream> #include ...

  8. python string 转bytes 以及bytes 转string

    string转 bytes 使用 encode str_a = "Python" str_bytes = str_a.encode() # encode默认编码方式是utf-8 所 ...

  9. TypeError: string argument without an encoding

    这个错误是把string 类型转byte类型的时候出现的问题 下面就会报错 print(bytes(str_a)) 修改为如下就好了 print(bytes(str_a.encode())) 或者就不 ...

  10. TypeError: ord() expected string of length 1, but int found

    错误如下 ord 里面要求的是一个string 的字符, 这里使用了int  ,所以修改了print(ord("1")) 转ASCII 的时候需要注意了,

最新文章

  1. 决定把BLOG的文章从CU上同步过来
  2. Alpha版使用说明
  3. kali字典_kali黑客系统wpscan工具扫描wordpress漏洞入侵攻击测试教程
  4. UVA - 10474
  5. 进制转换工具类-JAVA
  6. [软件更新]影拓三代 PTZ系列 系列 驱动程序 V6.1.1-3{链接已修复}
  7. android手机版excel怎样填充序列号,规范日期数据的极简法。Excel填充功能快速填充序号操作详解。如何制作工作日序列号填充,快速填充功能无法使用...
  8. log4j2日志配置颜色
  9. 如何查看自己的电脑硬盘是不是固态硬盘
  10. Pattern Recognition期刊投稿经验
  11. 计算机网络实验二 CDMA编码 求所有正交码片
  12. lsof u mysql wc l_MySQL:为什么lsof会看到这么多临时文件
  13. 科研卫星服务的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. 软件复用的优点,举例描述支持软件复用的方法和内容。
  15. 数据库连接池之自定义连接池(mysql)
  16. solar在linux系统下的部署过程
  17. Tomcat配置问题(踩坑记录)
  18. MFC封装功能成动态库相关问题汇总记录
  19. 腿式机器人激光SLAM系统
  20. 使用微软Office组件读取Excel文件

热门文章

  1. 方法论:带着问题找答案
  2. 网络安全进阶学习第四课——SSRF服务器请求伪造
  3. 赛盈分销观察 | 美国电商市场规模超万亿美元,沃尔玛加速追赶亚马逊,向全渠道零售转型发力!
  4. matlab画奇异吸引子,《走近混沌》-13-奇异吸引子
  5. 毕业后月薪50K,他的竞争力来自哪里?你为什么不行?
  6. 网络基础之 局域网与广域网
  7. 跨境电商独立站的运营技巧都有哪些?
  8. Spring Boot学习的总结
  9. php批量压缩图片,基于PHP实现等比压缩图片大小
  10. 常用 sap 表 德语缩写 英汉注释