string内部有多个append函数,我们就拿其中一个来说(基本原理都一样)。

其中第一步中的if (_Count <= _Mypair._Myval2._Myres - _Old_size)可以翻译为
如果(加入的字符大小<= 当前大小 - 已存在的字符占用大小) ,其内部直接就是将我们append的字符复制进的当前的数组内。

第二步其实就很简单,重新创建一个满足需求大小的数组并将之前的数据和我们append添加的数据拷贝进去。那么创建的数组大小是多少呢,我们来看这个函数,这是第二部跳转到的函数内部

其中新创建的数组大小正是剪头所指的地方调用的函数返回结果,那么我们来看看这个函数

其中的_ALLOC_MASK是个三目运算符返回的结果,结果为15,而_Requested就是传参进来的_New_size,_New_size     = _Old_size + _Size_increase。那么就是原本的(数组的大小 + 添加的数据大小) | 15,而最后的那个_Max_value也是一个三目运算符,返回的是两个参数中最大的那一个,那么创建的数组大小就很明确了,
结果大小有两个 :
1. 当前string内的字符大小 + 添加的数据大小 + n( n <=15 );
2. 当前string的最大容量大小 + 当前string的最大容量大小 / 2.

浅析std::string的append方法相关推荐

  1. C++ - std::string字符串格式化方法总结

    文章目录 1 C++ std::string字符串格式化 1.1 C语言中的字符串格式化 1.2 C++使用std::stringstream进行字符串格式化 1.3 开源的C++单个头文件的字符串格 ...

  2. ATL::CStringA和std::string之间转换的一些误区

    对于刚做windows下VC的开发同学,类型转换应该是一个令其很苦恼的问题.我刚写工作的时候,也为这类问题不停的在网上搜索转换方法.最近工作中遇到一个"神奇"的bug(一般&quo ...

  3. 将整个ASCII文件读入C ++ std :: string [重复]

    本文翻译自:Read whole ASCII file into C++ std::string [duplicate] This question already has an answer her ...

  4. 用std::string::compare()用法

    c++系列文章目录 c++处理文本相对于python等脚本语言还是挺麻烦的,往往需要和fstream.fstream.string.一起配合使用才能完全把文本解析出来.其实,string并不是一个单独 ...

  5. c语言 append,对C++ string append方法的常用用法详解

    C++ string append()添加文本 使用append()添加文本常用方法: 直接添加另一个完整的字符串: 如str1.append(str2); 添加另一个字符串的某一段子串: 如str1 ...

  6. 【C++ 语言】C++字符串 ( string 类 | 创建方法 | 控制台输出 | 字符串操作 | 栈内存字符串对象 | string* )

    文章目录 C++ 字符串 对象 C++ 字符串 对象 创建方法 C++ 字符串 对象 输出到控制台 C++ 字符串 拼接 C++ 字符串 方法调用 ( 栈内存对象 ) C++ 字符串 方法调用 ( 堆 ...

  7. std:: string 的常用使用

    std string 的常用使用 用 string来代替char * 数组,使用sort排序算法来排序,用unique 函数来去重1.Define string s1 = "hello&qu ...

  8. C++ 标准程序库std::string 详解

    现在一般不再使用传统的char*而选用C++标准程序库中的string类,是因为string标准程序和char*比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个类出现,集成的操作函数足以完 ...

  9. C++字符串(string/to_string/append/substr/length/find/rfind/replace/stoi转数字转int)

    之前大概的说了一下string这个类,在这篇文章中,本章继续学习string,这个类是c++独有的,在c语言中无法使用 #include <string>// 导入string的头文件 i ...

最新文章

  1. SAP QM中阶之Reference Operation Set 的使用
  2. 源码包安装和快捷管理nginx,自定义命令管理服务
  3. python conn_python中conn是什么
  4. eos操作系统_EOS基础全家桶(十一)智能合约IDE-EOS_Studio
  5. Android NDK带来什么
  6. 对程序员非常重要的24个软技能
  7. 网站流量和金钱的关系
  8. 递归法:走楼梯; 旋转数组的最小数字(递归法和改进二分法)
  9. C++,std::shared_future的使用
  10. macOS平台安装metasploit
  11. 有技术,没在怕,就是干!
  12. SQlite数据库的C编程接口(二) 数据库连接 ——《Using SQlite》读书笔记
  13. Redis - 学习笔记(1)
  14. Spring JDBC 【继承JdbcDaoSupport】
  15. 28个超有用的PPT小技巧,快来收藏
  16. linux dos2unix
  17. 玩转GD32F3x0开发板 (二)
  18. R绘图| Kaplan-Meier曲线及美化
  19. npm ERR path /Users/user/Desktop/app/node_modules/node-sass
  20. 第一个vtk.js程序 锥子

热门文章

  1. 计算机课程设置图片,《计算机图像处理》课程教学大纲.doc
  2. 还没获得敬业福?快扫这个福立得万能福与敬业福,欧力给
  3. Ubuntu从零开始安装
  4. 计算机等级考试建议报考,全国计算机二级考试:科目报考建议
  5. 【StarOS低代码教程系列02】——十分钟制作电影票房管理后台
  6. Redhat 设置北京时间
  7. Unity2017 UGUI开发 之 字体渐变
  8. 服务器输入信号超出,U盘安装CentOS显示“输入信号超出范围”解决
  9. 二、基本语法(笔记)
  10. 智能手机SoC行业现状调研及趋势分析报告