几乎每个string的实现都包括如下信息:

  • 字符串的大小(size()),即它所包含的字符的个数。
  • 用于存储该字符串中字符的内存的容量(capacity())。
  • 字符串的值(value),即构成该字符串的字符。
  • 它的分配子的一份拷贝。这个字段是可选的。
  • 对值的引用计数。

下面是常见的4中实现方式:


不同的实现以不同的方式利用了这些涉及上的灵活性。总结这些区别如下:

  • string的值可能会被引用计数,也可能不会。很多实现在默认情况下会使用引用计数,但它们通常提供了关闭默认选择的方法,往往是通过预处理宏带来做到这一点。只有当字符串被频繁拷贝时,引用计数才有用,而有些应用并不经常拷贝内存,这就不值得使用引用计数了。
  • string对象大小的范围可以是一个char*指针的的大小的1倍到7倍。
  • 创建一个新的字符串值可能需要零次、一次或者两次动态分配内存。
  • string独享可能共享,也可能不共享其大小和容量信息。
  • string可能支持,也可能不支持对单个对象的分配子。
  • 不同的实现对字符内存的最小分配单位有不同的策略。

15. 注意string实现的多样性相关推荐

  1. effective stl 条款15 小心string实现的多样性

    实际上每个string实现都容纳了下面的信息: ● 字符串的大小,也就是它包含的字符的数目. ● 容纳字符串字符的内存容量.(字符串大小和容量之间差别的回顾,参见条款14.) ● 这个字符串的值,也就 ...

  2. [2013.9.15]关于string::nops为什么是-1

    const size_t string::nops = -1; 大家可能看到这条定义有些疑惑 为什么找不到字符串要返回-1呢 size_t是unsigned int类型 -1是int类型 那么同等大小 ...

  3. Effective STL 50条有效使用STL的经验笔记

    Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...

  4. ###《Effective STL》--Chapter2

    点击查看Evernote原文. #@author: gr #@date: 2014-09-15 #@email: forgerui@gmail.com Chapter2 vector和string T ...

  5. c 串转string_string::c_str()、string::c_data()及string与char *的正确转换

    string::c_str的介绍: c_str函数的返回值是const char*的,不能直接赋值给char*,所以就需要我们进行相应的操作转化,下面就是这一转化过程. c++语言提供了两种字符串实现 ...

  6. c 串转string_c++ 中 char 与 string 之间的相互转换问题

    string::c_str().string::data()的区别: const value_type *c_str( ) const; const value_type *data( ) const ...

  7. C++中有string类,string是一个类不是一种类型,c语言中没有

    前言: string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花缭乱的string find 函数 1.3 string insert, replace, er ...

  8. STL中map和string, vector 用法详解

    1. map 用法详解 std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成 ...

  9. C++ string 用法详解(转)

    C++ string 详解 任何人对本文进行引用都要标明作者是Nicolai M.Josuttis /// C++ 语言是个十分优秀的语言,但优秀并不表示完美.还是有许多人不愿意使用C或者C++,为什 ...

  10. 详细解说STL string

    详细解说STL string 详细解说STL string 0 前言: string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花缭乱的string find 函 ...

最新文章

  1. 关于大家对Swin Transformer的魔改论文模型记录(只关注Swin是如何使用的)
  2. Azure SQL 数据库最新版本现已提供预览版
  3. javascript运算符_JavaScript中的按位运算符
  4. Spring核心组件的理解
  5. Android OkHttp经验小结
  6. 介绍计算机的英文文章,计算机方面的英语资料,介绍一些计算机的英语短文,有兴趣的可以看...
  7. rabbitmq的通配符模式(Topic Exchange)的*和#区别
  8. 下列哪个python语句是正确的_Python笔试面试题_牛客(待完善)
  9. Leetcode 刷题笔记(三) —— 数组类型解题方法三:滑动窗口
  10. Spring源码之ApplicationContext(一)
  11. 加密算法(二)——MD5,Base64,DES,RSA加密算法解析
  12. 《算法图解》第九章 动态规划
  13. weblogic查看版本号教程
  14. Tab Layout教程
  15. linux 查看 文件夹代销,速达常见问题集
  16. java poi读取excel数据_java 使用POI读取excel数据
  17. android回溯机制,Android事件分发机制全面解析
  18. python函数增强代码可读性_如何提高代码的可读性 学习笔记
  19. html标签的多级列表,word如何将标题样式关联多级列表
  20. 动态规划 HDU 1493 QQpet

热门文章

  1. 一文看懂测试自动化的玄妙
  2. CentOS7 升级到7.4
  3. 解读InnoDB页面--索引结构
  4. 老外编辑带你迈出自己容器化的第一步
  5. 设计网页录入信息与自己定义server数据接收
  6. 网络知识 -- 第二部
  7. ucOS学习--基础知识
  8. 6.业务架构·应用架构·数据架构实战 --- 双轮驱动的技术架构设计
  9. 3.1 Zend_Db_Adapter
  10. 自学如何去学习jQuery