C++ STL概念之 序列式容器3(string)

string 常用接口

operator += 

string (1)
string& operator+= (const string& str);
c-string (2)
string& operator+= (const char* s);
character (3)
string& operator+= (char c);
initializer list (4)
string& operator+= (initializer_list<char> il);

+= 运算符接受右侧的字符串,并将其内容附加到左侧字符串的末尾。

左侧的字符串需要是一个 std::string 对象,而右侧可以是 std::string 对象、字符数组、字面量字符串或单个字符。

使用 += 运算符进行字符串连接的操作比使用 + 运算符更高效,因为它避免了不必要的临时字符串对象的创建。

string (1)

  • 运算符重载函数string& operator+= (const string& str);
  • 说明: 这个重载的 += 运算符接受一个 std::string 对象作为参数,并将其内容附加到当前字符串的末尾。操作完成后,当前字符串对象被更新,并作为引用返回。

c-string (2)

  • 运算符重载函数string& operator+= (const char* s);
  • 说明: 这个重载的 += 运算符接受一个 C 风格字符串(以空字符 '\0' 结尾的字符数组)作为参数,并将其内容附加到当前字符串的末尾。操作完成后,当前字符串对象被更新,并作为引用返回。

character (3)

  • 运算符重载函数string& operator+= (char c);
  • 说明: 这个重载的 += 运算符接受一个字符作为参数,并将这个字符附加到当前字符串的末尾。操作完成后,当前字符串对象被更新,并作为引用返回。

initializer list (4)

  • 运算符重载函数string& operator+= (initializer_list<char> il);
  • 说明: 这个重载的 += 运算符接受一个字符的初始化列表作为参数,并将列表中的所有字符按顺序附加到当前字符串的末尾。操作完成后,当前字符串对象被更新,并作为引用返回。

find

string (1)
size_t find (const string& str, size_t pos = 0) const noexcept;
c-string (2)
size_t find (const char* s, size_t pos = 0) const;
buffer (3)
size_t find (const char* s, size_t pos, size_type n) const;
character (4)
size_t find (char c, size_t pos = 0) const noexcept;

用于在字符串中搜索特定的子串、C 风格字符串、字符缓冲区或单个字符,并返回首次出现的位置。

  1. string (1)

    • 函数原型size_t find (const string& str, size_t pos = 0) const noexcept;
    • 说明: 在从位置 pos 开始的字符串中搜索 str 指定的字符串。
    • 参数:
      • str:要搜索的字符串。
      • pos:开始搜索的初始位置,默认为 0。
  2. c-string (2)

    • 函数原型size_t find (const char* s, size_t pos = 0) const;
    • 说明: 在从位置 pos 开始的字符串中搜索由 s 指定的C风格字符串。
    • 参数:
      • s:要搜索的以空字符终止的C风格字符串。
      • pos:开始搜索的初始位置,默认为 0。
  3. buffer (3)

    • 函数原型size_t find (const char* s, size_t pos, size_type n) const;
    • 说明: 在从位置 pos 开始的字符串中,搜索由 s 指向的前 n 个字符组成的字符缓冲区。
    • 参数:
      • s:指向字符数组的指针。
      • pos:开始搜索的初始位置。
      • n:需要搜索的字符数量。
  4. character (4)

    • 函数原型size_t find (char c, size_t pos = 0) const noexcept;
    • 说明: 在从位置 pos 开始的字符串中搜索指定的单个字符 c
    • 参数:
      • c:要搜索的字符。
      • pos:开始搜索的初始位置,默认为 0。

insert / erase

insert

string (1)
 string& insert (size_t pos, const string& str);
substring (2)
 string& insert (size_t pos, const string& str, size_t subpos, size_t sublen = npos);
c-string (3)
 string& insert (size_t pos, const char* s);
buffer (4)
 string& insert (size_t pos, const char* s, size_t n);
fill (5)
 string& insert (size_t pos,   size_t n, char c);
iterator insert (const_iterator p, size_t n, char c);
single character (6)
iterator insert (const_iterator p, char c);
range (7)
template <class InputIterator>
iterator insert (iterator p, InputIterator first, InputIterator last);
initializer list (8)
 string& insert (const_iterator p, initializer_list<char> il);
  1. string (1)

    • 函数原型string& insert(size_t pos, const string& str);
    • 说明: 在字符串的 pos 位置插入整个 str 字符串。
  2. substring (2)

    • 函数原型string& insert(size_t pos, const string& str, size_t subpos, size_t sublen = npos);
    • 说明: 在字符串的 pos 位置插入 str 字符串的一部分,开始于 str 的 subpos 位置,并包括最多 sublen 个字符。
  3. c-string (3)

    • 函数原型string& insert(size_t pos, const char* s);
    • 说明: 在字符串的 pos 位置插入 C 风格的字符串 s
  4. buffer (4)

    • 函数原型string& insert(size_t pos, const char* s, size_t n);
    • 说明: 在字符串的 pos 位置插入 C 风格字符串 s 的前 n 个字符。
  5. fill (5)

    • 函数原型string& insert(size_t pos, size_t n, char c);
    • 说明: 在字符串的 pos 位置插入 n 个字符 c
  6. single character (6)

    • 函数原型iterator insert(const_iterator p, char c);
    • 说明: 在由迭代器 p 指定的位置插入单个字符 c。返回值是指向新插入字符的迭代器。
  7. range (7)

    • 函数原型iterator insert(iterator p, InputIterator first, InputIterator last);
    • 说明: 在由迭代器 p 指定的位置插入由另外两个迭代器 first 和 last 指定的范围内的字符序列。
  8. initializer list (8)

    • 函数原型string& insert(const_iterator p, initializer_list<char> il);
    • 说明: 在由迭代器 p 指定的位置插入字符的初始化列表 il

erase

sequence (1)
 string& erase (size_t pos = 0, size_t len = npos);
character (2)
iterator erase (iterator p);
range (3)
     iterator erase (iterator first, iterator last);
sequence (1)
  • 函数签名string& erase(size_t pos = 0, size_t len = npos);
  • 说明: 此成员函数会删除从索引 pos 开始,长度为 len 的一个子串。如果 len 是 std::string::npos(如果没有提供,这将是默认值),那么从 pos 开始到字符串结尾的所有字符都将被删除。

character (2)

  • 函数签名iterator erase(iterator p);
  • 说明erase 的这个重载函数可以删除由迭代器 p 指向的单个字符。

range (3)

  • 函数签名iterator erase(iterator first, iterator last);
  • 说明: 这个重载函数允许从字符串中删除一序列字符,由范围 [first, last) 指定,其中 first 是开始迭代器,last 是结束迭代器(last 指向的字符不包含在内)。

operator  [ ]

char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
1. char& operator[](size_t pos);
  • 这是一个非常方便的访问特定位置字符的方法,pos 是你想访问的字符的位置。你可以通过它来读取或改变字符串中的字符。如果 pos 等于字符串的长度,这个函数将返回一个可修改的空字符('\0')。如果 pos 大于字符串的长度,这个行为是未定义的,可能会抛出 std::out_of_range 异常。

2.const char& operator[](size_t pos) const;

  • 这个版本的 operator[] 与上一个几乎完全相同,但它适用于常量字符串,返回一个常量引用。你可以通过它来读取字符串中的字符,但不能改变它们。如果 pos 等于字符串的长度,函数返回一个不可修改的空字符('\0')。如果 pos 大于字符串的长度,这个行为是未定义的。

iterator

std::string 类型的迭代器是一个双向迭代器,允许你按顺序访问字符串中的字符。通过使用迭代器,你可以遍历字符串、读取或修改它的元素,而不需要直接操作字符串的内部表示。

字符串的迭代器可以通过字符串对象的成员函数 begin() 和 end() 获得,其中:

  • begin() 返回一个指向字符串第一个字符的迭代器。
  • end() 返回一个指向字符串末尾(即最后一个字符之后的位置)的迭代器。

除此之外,std::string 还提供了 rbegin() 和 rend() 方法来获得反向迭代器(reverse_iterator),它们分别指向字符串的最后一个字符和第一个字符之前的位置,允许你从字符串的末尾向前遍历。

c_str

const char* c_str() const noexcept;

返回一个指向以空字符('\0')结尾的字符数组的指针。这个字符数组的内容与原 std::string 对象的数据完全相同。

这个函数通常用于与需要传入 C 风格字符串(const char*)作为参数的函数进行接口。保证 std::string 与 C 风格字符数组之间的兼容性。

 

特别注意,返回的字符数组是只读的,你不能通过返回的指针来修改原始的 std::string 对象。

 

另外,值得注意的是,当 std::string 的内容被改变(如插入、删除或更新操作)后,之前从 c_str() 得到的值可能就不再有效了。

substr

string substr (size_t pos = 0, size_t len = npos) const;

用于创建字符串的一个子字符串。

substr() 函数返回一个新的 std::string 对象,它包含从原字符串指定位置开始的特定长度的字符。如果 pos 是大于原字符串长度的值,将抛出 std::out_of_range 异常。

reserve / resize

reserve

void reserve (size_t n = 0);

参数 n 表示你预计将要存储在容器中的元素数量。调用 reserve() 函数后,容器会分配足够的内存空间来存储至少 n 个元素。这样做的目的是为了减少当元素逐个添加到容器中时需要进行的内存重新分配次数。

resize

void resize (size_t n);
void resize (size_t n, char c);
  1. void resize(size_t n); 这个函数把字符串长度调整至 n 个字符。如果 n 小于当前字符串长度,那么原字符串将被截断到 n 个字符。如果 n 大于当前字符串长度,则在原字符串末尾添加足够数量的空字符(\0)使得总长度达到 n

  2. void resize(size_t n, char c); 这个函数与上一个函数在功能上基本相同,只是当 n 大于当前字符串长度时,新添加的字符不再是空字符,而是参数 c 指定的字符。

to_string / stoi

to_string

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

它们可以将数值转换为字符串。

stoi

int stoi (const string&  str, size_t* idx = 0, int base = 10);
int stoi (const wstring& str, size_t* idx = 0, int base = 10);

用于将字符串转换为整数的函数。

  • str: 要转换的字符串。
  • idx: 一个指针,用于存储处理过程中第一个不符合数值字符部分的下标,默认为 nullptr。如果不为 nullptr,转换停止于第一个不是数字符号的字符处,idx 将设置为该位置的下标。
  • base: 数字的基数,默认为10,表示十进制。可设定为2-36之间的值,用于解析不同进制的数字字符串。

如果成功,函数会返回转换后的整数值。如果转换过程中发生错误,比如传入的字符串不是一个有效的数字表示,或者数字超出了 int 的表示范围,那么函数可能抛出一个异常。

reverse

template <class BidirectionalIterator>void reverse (BidirectionalIterator first, BidirectionalIterator last);

反转一个序列中的元素顺序。

参数说明:

  • first: 序列中要反转的范围的起始迭代器。
  • last: 序列中要反转的范围之后的一个迭代器(末尾迭代器的下一个位置)。

该函数不返回任何值,它直接在传入的序列上操作,将 [first, last) 范围内的元素反转。这个函数需要双向迭代器(BidirectionalIterator),因为它需要能够在序列中向前和向后两个方向上进行迭代。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1425135.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

又一个行业被Ai背刺了:Comfyui生成你的专属模特!

工作流获取方式放在文末了 Ai技术的进步&#xff0c;带来了许多之前无法实现的新技术和新成品&#xff0c;这也使得曾经需要漫长的时间和复杂的创作过程才能够完成的工作呗Ai技术轻松代替。 于此同时&#xff0c;不同行业也在这个过程中受到了不同程度的冲击。 今天给大家分…

反激式开关电源-8利用AP法进行变压器设计

变压器AP的计算 在变压器设计中&#xff0c;主要有两种方法&#xff0c;一种称为Kc法&#xff0c;这种方法也称为磁芯几何参数法&#xff0c;如果用这个方法来进行设计&#xff0c;那么我们首先要计算出磁芯的几何参数Kc值&#xff0c;在这个参数上留有一定的裕度后选取和Kc值…

在win10折腾Flowise:部署和尝试

Flowise 是一种低代码/无代码拖放工具&#xff0c;旨在让人们轻松可视化和构建 LLM 应用程序。 本地部署 操作系统&#xff1a; win10 由于网络、操作系统等各种未知问题&#xff0c;使用npm install -g flowise的方式&#xff0c;尝试了很多次&#xff0c;都没有部署成功&am…

信息安全相关内容

信息安全 安全防护体系 安全保护等级 安全防护策略 安全技术基础 安全防护体系 安全防护体系有7个等级 安全保护等级 安全保护等级有5个等级,从上到下是越来越安全的用户自主其实就是用户自己本身具有的相应的能力 安全防护策略 安全策略是对抗攻击的主要策略安全日志: …

24长三角B题1-5问完整代码+15页保姆级思路已更新

比赛题目的完整版思路可执行代码数据参考论文都会在第一时间更新上传的&#xff0c;大家可以参考我往期的资料&#xff0c;所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意&#xff1a;&#xff08;建议先下单占坑&#xff0c;因为随着后续我们更新资料数…

单片机烧录程序时“DTR的低电平复位,RTS高电平进入bootloader”有关的串口Modem联络信号

烧录程序时常见DTR和RTS引脚 参考&#xff0c;参考视频 因为常常使用的都是串口下载程序&#xff0c;常用的芯片CH340系列&#xff0c;下图中标红的引脚是MODEM联络信号&#xff0c;其中常见的DTR和RTS就是常见的串口Modem网络输出信号&#xff0c;也就是通过烧录软件控制的接…

一键操作!如何轻松将安卓手机视频传输到电脑

在这篇文章中&#xff0c;我们将探讨如何使用Coolmuster Android Assistant软件&#xff0c;从安卓设备传输视频文件到电脑。Coolmuster Android Assistant是一款强大的管理工具&#xff0c;它能够帮助用户轻松地管理安卓设备上的数据&#xff0c;包括联系人、短信、应用程序、…

吴恩达深度学习笔记:优化算法 (Optimization algorithms)2.8

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第二周&#xff1a;优化算法 (Optimization algorithms)2.8 Adam 优化算法(Adam optimization algor…

React 第三十七章 Scheduler 最小堆算法

在 Scheduler 中&#xff0c;使用最小堆的数据结构在对任务进行排序。 // 两个任务队列 var taskQueue: Array<Task> []; var timerQueue: Array<Task> [];push(timerQueue, newTask); // 像数组中推入一个任务 pop(timerQueue); // 从数组中弹出一个任务 time…

通过 Apple Vision Pro 释放创造力:深入研究空间计算

Apple 最新进军空间计算领域的 Apple Vision Pro,标志着重新定义我们与技术交互方式的重大飞跃。空间计算超越了传统界限,允许用户以无缝集成到物理世界的方式参与 2D 和 3D 内容。 我们可以关注两种类型的体验: 在空间中渲染 2D 内容。这涉及将现有设备窗口投影到空间领域…

QT:QML与C++交互

目录 一.介绍 二.pro文件添加模块 三.h文件 四.cpp文件 五.注册 六.调用 七.展示效果 八.代码 1.qmlandc.h 2.qmlandc.cpp 3.main.cpp 4.qml 一.介绍 在 Qt 中&#xff0c;QML 与 C 交互是非常重要的&#xff0c;因为它允许开发人员充分利用 QML 和 C 各自的优势&…

OpenAI GPT-4o:开启人工智能交互新纪元

引言 在人工智能领域&#xff0c;OpenAI一直是创新的代名词。2024年5月14日&#xff0c;OpenAI再次以GPT-4o模型震撼了科技界&#xff0c;这款全新的旗舰生成模型不仅免费向公众开放&#xff0c;更以其革命性的多模态交互能力&#xff0c;引领我们进入了一个全新的科幻时代。 …

位图和布隆过滤器:位图

在《unordered_map 和 unordered_set》 中提到过&#xff1a; 哈希是一种思想&#xff0c;通过哈希函数将数据转化为一个或多个整型 —— 映射关系&#xff1b;通过这种映射关系&#xff0c;可以做到以 O(1) 的时间复杂度查找数据。 本文即将介绍的 位图 和 布隆过滤器 就是两个…

亚马逊Prime Day旺季备货遭遇美国海关查验高峰,应对策略全攻略!

随着全球化贸易的日益繁荣&#xff0c;跨境电商企业在旺季备货时面临着巨大的挑战&#xff0c;尤其是当遇到美国海关查验潮时&#xff0c;如何应对成为众多商家关注的焦点。本文将从分析美国海关查验的原因入手&#xff0c;为商家提供一系列应对策略和建议。 一、美国海关查验潮…

​学者观察 | 从区块链应用创新看长安链发展——CCF区块链专委会荣誉主任斯雪明

导语 2024年1月27日&#xff0c;斯雪明教授在长安链发布三周年庆暨生态年会上发表演讲&#xff0c;认为在区块链发展过程中&#xff0c;不仅需要技术创新&#xff0c;同时需要有价值、有特色、有示范意义的应用创新。斯雪明教授介绍了国内区块链技术与应用发展的现状、趋势与挑…

SVN切换账号

SVN切换账号 有这么一种情况&#xff0c;对于一个新项目&#xff0c;项目紧急的情况下&#xff0c;大家会使用一个svn账号下载代码&#xff0c;开始提前熟悉业务。那么当正式开发的时候&#xff0c;每个人的svn账号也已经下发下来了&#xff0c;这个时候大家就需要切换成自己的…

C# .Net8 switch 的用法

在 .net 8中&#xff0c;switch 不需要再和传统的写法一样了&#xff0c;会更加的方便 创建一个 .net 8 控制台项目 switch 的写法没必要和以前一样 namespace SwitchTest {internal class Program{static void Main(string[] args){int day 3;var week day switch{1 > &…

AIGC文生视频:Sora模型报告总结

作为世界模拟器的视频生成模型 我们探索视频数据生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用对视频和图像潜在代码的时空补丁进行操作的变压器架构。我们最大的模型 Sora 能够生成一分钟…

继承的奥秘:面向对象编程中的血脉传承与智慧抉择

1. 概述 在面向对象编程&#xff08;OOP&#xff09;中&#xff0c;继承是构建复杂软件系统的基石之一。它允许我们定义一个类&#xff08;称为父类或基类&#xff09;作为其他类&#xff08;称为子类或派生类&#xff09;的基础&#xff0c;子类能够自动获得父类的属性和方法…