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.mzph.cn/news/838088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站DDoS攻击应对策略:全面防护与恢复指南

随着互联网的发展&#xff0c;网络安全问题日益凸显&#xff0c;其中DDoS&#xff08;分布式拒绝服务&#xff09;攻击成为了网站安全的主要威胁之一。当网站遭受DDoS攻击时&#xff0c;可能会面临服务中断、性能下降、数据泄露等严重后果。因此&#xff0c;了解并掌握DDoS攻击…

达梦(DM) SQL查询及联合查询

达梦DM SQL查询及联合查询 查询结果排序多表联合查询 这里继续讲解DM数据库的Sql查询操作 查询结果排序 为提高查询结果可读性&#xff0c;我们可以对查询结果按照一定顺序排列&#xff0c;或者也可以将列名替换成数字&#xff0c;例如 ORDER BY 1 DESC&#xff0c;意思是按第…

搭建域环境

文章目录 配置域控网络安装DNS服务安装域控新建用户新建域内机器 windows server 2008是基于windows vista开发的&#xff0c;windows server 2008 r2是基于Win 7开发的。域控为windows server 2008. 配置域控网络 在网络共享中心配置域控IP&#xff0c;这里设置域控IP为&…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第22课-烟花插件的制作

【WEB前端2024】开源智体世界&#xff1a;乔布斯3D纪念馆-第22课-烟花插件的制作 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引…

MATLAB公式推导和导出Latex格式的方法

最近在推机械臂正逆运动学公式&#xff0c;那个旋转矩阵乘起来是真滴多&#xff0c;手算算的脑浆疼。突然想起来MATLAB还有符号计算这个功能&#xff0c;于是翻了翻手册&#xff0c; 找到了这个利用MATLAB帮助计算公式并且直接导出Latex格式的办法。 先定义符号变量&#xff0…

计算机网络-路由策略与路由控制一

到目前为止我们学习了路由与交换基础&#xff0c;路由协议有静态、RIP、OSPF、IS-IS等&#xff0c;但是根据实际组网需求&#xff0c;往往需要实施一些路由策略对路由信息进行过滤、属性设置等操作&#xff0c;通过对路由的控制&#xff0c;可以影响数据流量转发。 因此我们开始…

uniapp 开启阿里云服务并开启unipush消息推送

本篇只是为了记录初次使用unipush服务的一些步骤 一、开启uniCloud云开发环境&#xff0c;新建阿里云服务 1、项目右键选择创建uniCload云开发环境&#xff0c;选择阿里云 2、在项目里面新创建的uniCloud文件夹右键选择关联云服务空间或项目&#xff0c;并点击新建 3、在服务…

排列三中奖概率分析

排列三中奖的概率分析主要取决于不同的投注方式。以下是针对排列三不同投注方式的中奖概率分析&#xff1a; 直选&#xff1a;排列三总共有1000个不同的号码组合&#xff0c;因此直选的中奖概率是1/1000。这意味着&#xff0c;如果你随机选择一个号码进行投注&#xff0c;你中…

整理php中可以使用多种方法对数组进行排序常用的函数

整理php中可以使用多种方法对数组进行排序常用的函数 常用函数示例代码 常用函数 sort() - 以升序对数组进行排序。 rsort() - 以降序对数组进行排序。 asort() - 以升序对关联数组进行排序&#xff0c;保持键/值关系。 arsort() - 以降序对关联数组进行排序&#xff0c;保持键…

深入理解指针(2)

在上一篇深入理解指针(1)中我们已经初步了解指针地址&#xff1b;指针的解引用&#xff1b;指针变量类型作用&#xff0c;指针运算等知识&#xff0c;接下来我们将继续学习指针的相关内容&#xff0c;一起加油吧&#xff01;&#xff01;&#xff01; 1. 数组名的理解 在之前的…

【计算机网络】HTTP协议详解实战抓包分析教程

文章目录 1.HTTP简介2.HTTP报文的结构3.HTTP协议中空行的作用4.uri和url的区别5.HTTP请求5.1 HTTP请求方法5.2 HTTP请求报头 6.HTTP响应6.1 状态码 7.HTTP位于应用层(基于TCP)8.非持久和持久连接8.1 非持久连接8.2 持久连接 1.HTTP简介 HTTP&#xff08;Hypertext Transfer Pr…

pandas style添加表格边框,或是只添加下边框等自定义边框样式设置

添加表格边框 可以使用如下程序添加表格&#xff1a; import dataframe_image as dfi import pandas as pd import numpy as npdf pd.DataFrame(np.random.random(size(10, 5))) df_style df.style.set_properties(**{text-align: center,border-color: black,border-width…

cubemx配置stm32f407VET6实现USB虚拟串口

背景&#xff1a; 最近做项目需要使用USB&#xff0c;一根数据线连接“mcu的板子”和“电脑”&#xff1b; 电脑上的串口助手通过USB线和mcu的USB通信&#xff1b; 原理图&#xff1a; 1&#xff09;外围电路2&#xff09;mcu引脚 软件实现&#xff1a; 1.cubemx配置USB_devic…

流程图用什么软件做?选择这4款,让工作事半功倍

流程图用什么软件做&#xff1f;流程图是一种直观、清晰的图形表示法&#xff0c;它通过节点、箭头和符号等元素&#xff0c;精确地展示出一系列步骤、决策点以及操作过程。这种图形化的呈现方式不仅简化了复杂信息的处理&#xff0c;还使得读者能够迅速把握整体流程&#xff0…

Day54代码随想录动态规划part15:392.判断子序列、115.不同的子序列

Day54 动态规划part15编辑距离 392.判断子序列 leetcode链接&#xff1a;392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 题意&#xff1a;给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些&#xff08;也可以不…

构建第一个ArkTS应用之@LazyForEach:数据懒加载

LazyForEach从提供的数据源中按需迭代数据&#xff0c;并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach&#xff0c;框架会根据滚动容器可视区域按需创建组件&#xff0c;当组件滑出可视区域外时&#xff0c;框架会进行组件销毁回收以降低内存占用。 接口…

上海交大携手阿里巴巴成立人工智能与系统联合实验室

5 月 8 日&#xff0c;上海交通大学电子信息与电气工程学院&#xff08;简称电院&#xff09;与阿里巴巴集团宣布共同成立人工智能与系统联合实验室&#xff08;后称“联合实验室”&#xff09;&#xff0c;并在上海交大闵行校区举行了揭牌仪式。 上海交大电院副院长王贺升教授…

Go 语言将 PDF 转为 Word 如何处理

文章推荐 1 作为程序员&#xff0c;开发用过最好用的AI工具有哪些&#xff1f; 2 Github Copilot正版的激活成功&#xff0c;终于可以chat了 3 idea,pycharm等的ai assistant已成功激活 4 新手如何拿捏 Github Copilot AI助手&#xff0c;帮助你提高写代码效率 5 Jetbrains的a…

python实现图片模式转换成素描模式

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.分析 一.前言 素描,是一种用线条来描绘物体、场景或人物的绘画方式,它可以是简单的线条勾勒,也可以是复杂的光影渲染。这种艺术形式主要依赖线条和明暗关系来表现形态、空

Redis- 如何防止攻击者利用未授权访问 Redis 服务的攻击获取目标机器的 root 权限

攻击概述 以下攻击步骤展示了如何利用未加防护的 Redis 服务器&#xff0c;通过配置 Redis 的持久化机制&#xff0c;将攻击者的 SSH 公钥写入目标机器的 ~/.ssh/authorized_keys 文件&#xff0c;从而获取目标机器的 root 权限。这是一种典型的利用未授权访问 Redis 服务的攻…