当前位置: 首页 > news >正文

C++精进之路(十六)string类和标准模板库

C++提供了一组功能强大的库,这些库提供了很多常⻅编程问题的解决方案以及简化其他问题的工具。 string 类为将字符串作为对象来处理提供了一种方便的方法。string 类提供了自动内存管理功能以及众多处 理字符串的方法和函数。例如,这些方法和函数让您能够合并字符串、将一个字符串插入到另一个字符串 中、反转字符串、在字符串中搜索字符或子字符串以及执行输入和输出操作。
诸 如 a u t o _ p t r 以 及 C + + 1 1 新 增 的 s h a r e d _p t r 和 u n i q u e _p t r 等 智 能 指 针 模 板 使 得 管 理 由 n e w 分 配 的 内 存 更容易。如果使用这些智能指针(而不是常规指针)来保存new 返回的地址,则不必在以后使用删除运算 符。智能指针对象过期时,其析构函数将自动调用del ete 运算符。 STL是一个容器类模板、迭代器类模板、函数对象模板和算法函数模板的集合,它们的设计是 一致 的,都是基于泛型编程原则的。算法通过使用模板,从而独立于所存储的对象的类型:通过使用迭代器接 口,从而独立于容器的类型 。迭代器是广义指针。
STL使用术语“概念” 来描述 一组要求。例如,正向迭代器的概念包含这样的要求,即正向迭代器能 够被解除引用,以便读写,同时能够被递增。概念真正的实现方式被称为概念的“ 模型”。例如,正向迭代 器概念可以是常规指针或导航链表的对象。基于其他概念的概念叫作“改进”。例如,双向迭代器是正向迭 代器概念的改进。
诸如vector和set等容器类是容器概念(如容器、序列和关联容器)的模型 。STL定义了多种容器类 模 板 :v e c t o r 、d e q u e 、l i s t 、s e t 、m u l f i s e t 、m a p 、m u l t i m a p 和 b i t s et : 还 定 义 了适 配 器 类 模 板 q u e u e 、p r i or i t y _q u eu e 和stack:这些类让底层容器类能够提供适配器类模板名称所建议的特性接口。因此,stack 虽然在默认情 况下是基于vector的,但仍只允许在栈顶进行插入和删除。C++11新增了forward_list 、unordered_set、 unorder ed_multiset、unordered_map和unord ered_multimap。 有些算法被表示为容器类方法,但大量算法都被表示为通用的、非成员函数,这是通过将迭代器作为 容器和算法之间的接口得以实现的。这种方法的一个优点是:只需一个诸如for_cach()或copy()这样的函 数,而不必为每种容器提供一个版本;另一个优点是:STL 算法可用于非STL容器,如常规数组、string 对象、array 对象以及您设计的秉承STL选代器和容器规则的任何类。 容器和算法都是由其提供或需要的迭代器类型表征的。应当检查容器是否具备支持算法要求的迭代器 概念。例如,for _cach()算法使用一个输入迭代器,所有的STL容器类类型都满足其最低要求;而sort() 则要求随机访问迭代器,并非所有的容器类都支持这种迭代器。如果容器类不能满足特定算法的要求,则 可能提供一个专用的方法。例如,list 类包含一个基于双向迭代器的sort()方法,因此它可以使用该方法, 而不是通用函数。
S TL 还提供了函数对象 (函数符),函数对象是重载了()运算符 (即定义了oper ator()()方法)的类。 可以使用函数表示法来调用这种类的对象,同时可以携带额外的信息。自适应函数符有typedef语句,这种 语句标识了函数符的参数类型和返回类型。这些信息可供其他组件 (如函数适配器)使用。 通过表示常用的容器类型,并提供各种使用高效算法实现的常用操作 (全部是通用的方式实现的),
STL 提供了一个非常好的可重用代码源。可以直接使用STL 工具来解决编程问题,也可以把它们作为基本部件,来构建所需所需的解决方案。

模板类complex和valarray支持复数和数组的数值运算。

http://www.lryc.cn/news/273716.html

相关文章:

  • 【23.12.29期--Redis缓存篇】谈一谈Redis的集群模式
  • 【算法挨揍日记】day34——647. 回文子串、5. 最长回文子串
  • 欧科云链研究院:奔赴2024,Web3与AI共振引爆数字时代潘多拉魔盒
  • 【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试之【数学】2023C-素数之积【欧弟算法】全网注释最详细分类最全的华为OD真题题解
  • uniapp路由
  • 湖南大学-数据库系统-2023期末考试【原题】
  • 【Java EE初阶九】多线程案例(线程池)
  • 理解 Node.js 中的事件循环
  • Mac 软件出现「意外退出」及「打不开」解决方法
  • 随机森林 3(代码)
  • 勒索事件急剧增长,亚信安全发布《勒索家族和勒索事件监控报告》
  • LeetCode1523. Count Odd Numbers in an Interval Range
  • E中国铜金属行业需求前景及未来发展机遇分析报告2024-2030年
  • python SVM 保存和加载模型参数
  • JAVA进化史: JDK12特性及说明
  • Databend 的算力可扩展性
  • 「解析」Windows 如何优雅使用 Terminal
  • Linux第18步_安装“Ubuntu系统下的C语言编译器GCC”
  • 【Linux】Linux 基础命令 crontab命令
  • 14:00面试,14:08就出来了,问的问题过于变态了。。。
  • Ubuntu envs setting
  • Windows 下用 C++ 调用 Python
  • 九州金榜|家庭教育一招孩子不在任性
  • 爬虫案列 --抖音视频批量爬取
  • 【React系列】React中的CSS
  • 基于Kettle开发的web版数据集成开源工具(data-integration)-应用篇
  • 51单片机三种编译模式的相互关系
  • java 千帆大模型 流式返回
  • 全新互联网洗衣洗鞋小程序平台新模式
  • js 对于一些脚本中对于url的一些参数获取