string类的使用手册

1.构造函数

补充:npos:size_t类型数据的最大值

default (1)
string();
构造空的string类对象
copy (2)
string (const string& str);
拷贝构造函数(深拷贝)
substring (3)
string (const string& str, size_t pos, size_t len = npos);
在str的pos处开始,拷贝len个字符。
如果len为npos(不传参)或str从pos到尾的字符个数小于len,则有多少拷多少
from c-string (4)
string (const char* s);
用C-str来构造string类的对象
from sequence (5)
string (const char* s, size_t n);
拷贝s的前n个字符

fill (6)
string (size_t n, char c);
用n个字符连续的字符c来构造string类的对象
range (7)
template <class InputIterator>
  string  (InputIterator first, InputIterator last);
用从first到last(last取不到)的字符串构造string对象

2.string类的对象的容器操作

2.1 size

返回string的长度。

2.2 lenth

返回string的长度。

2.3 capacity

返回空间总大小

2.4 empty

检测字符串是否为空串,如果是,返回true,反之返回false。

2.5 clear

清空有效字符,使其变为空串

2.6 reserve

预留能容纳n个字符空间,也就是扩容。但是,这个操作不会改变size和内容。

注意:标准并未要求该函数一定要有缩容的功能。

2.7 resize
 

将有效字符改成n个。

如果n等于size,什么也不做。

如果n大于size,则尾插连续的字符c,使得size与n相等。如果没有指定字符c,则默认c为'\0'

如果n小于size,则保留前n个字符,多余的部分直接去掉。

注意:该函数会将size变成n,改变size的同时也改变了内容。并且,这个操作可能改变capacity

3.迭代器

定义:迭代器不一定是指针,但迭代器有类似于指针的供能。迭代器也有指向性,可以指向某一块空间;迭代器也可以解引用,用于访问迭代器指向的空间。

string类的迭代器有四种。

iterator

a random access iterator to char (convertible to const_iterator)

正向迭代器

访问char类型(iterator类型迭代器可转换成const_iterator)

const_iterator

a random access iterator to const char

正向常迭代器

访问const_char类型

reverse_iterator

reverse_iterator<iterator>

反向迭代器

访问char类型(reverse_iterator可转换成const_reverse_iterator)

const_reverse_iterator

reverse_iterator<const_iterator>

反向常迭代器

访问const_char类型

上述未具体说明的迭代器都不可以相互转换

正向迭代器和反向迭代器的区别

1.正向迭代器左小右大,逆向迭代器左大右小

2.正向迭代器+n将向右偏移n份空间,逆向迭代器+n将向左偏移n份空间

3.1 begin

返回指向第一个字符的正向(常)迭代器

3.2 end

返回指向最后一个字符的正向(常)迭代器

3.3 rbegin

返回指向最后一个字符的逆向(常)迭代器

3.4 rend

返回指向第一个字符的逆向(常)迭代器

3.5 operator[]

取出string对象的第pos个字符的引用。(由于取出的是引用,所以可以通过这种方法在string对象中写入数据)

有了迭代器以及对[]的重载,可以做出以下遍历。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
int main()
{
	string A = "asdfg";
	for (string::iterator it = A.begin(); it < A.end(); it++)//正向
		cout << *it;
	cout << endl;
 
	for (string::reverse_iterator it = A.rbegin(); it < A.rend(); it++)//逆向
		cout << *it;
	cout << endl;
	for (size_t i = 0; i < A.size(); i++)//正向
		cout << A[i];
	cout << endl;
	for (int i = A.size() - 1; i >= 0; i--)//逆向
		cout << A[i];
	cout << endl;
	return 0;
}

4.修改

4.1 push_back

后增一个字符,使size+1,可能改变capacity(取决于是否右扩容)

4.2 oprator+=
string (1)
string& operator+= (const string& str);
后增一个string对象
c-string (2)
string& operator+= (const char* s);
后增一个C-string
character (3)
string& operator+= (char c);
后增一个字符
4.3 append
string (1)
string& append (const string& str);
后增一个string对象
substring (2)
string& append (const string& str, size_t subpos, size_t sublen);
在str的subpos处取sublen个连续的字符(如果sublen比可取的字符数量多或sublen为npos,则有多少取多少),后增到string对象中
c-string (3)
string& append (const char* s);
后增一个C-string
buffer (4)
string& append (const char* s, size_t n);
后增s的前n个字符
fill (5)
string& append (size_t n, char c);
后增n个连续的字符c
range (6)
template <class InputIterator>
   string& append (InputIterator first, InputIterator last);
后增一个从first到last(last处取不到)的字符串
4.4 insert
string (1)
 string& insert (size_t pos, const string& str);
在string对象的pos处插入str
substring (2)
 string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);
从str的pos处取subpos个字符(如果sublen比可取的字符数量多或sublen为npos,则有多少取多少),插入到string对象的pos处
c-string (3)
 string& insert (size_t pos, const char* s);
在string对象的pos处插入s
buffer (4)
 string& insert (size_t pos, const char* s, size_t n);
在string对象的pos处插入s的前n个字符
fill (5)
 string& insert (size_t pos, size_t n, char c);
    void insert (iterator p, size_t n, char c);
在string对象的pos或p处插入连续个字符c(注意:使用insert插入一个字符时,必须写上需插入字符的数量,也就是1,这个设计很阴间,小心一点别写错了)
single character (6)
iterator insert (iterator p, char c);
在string对象的p处插入字符c
range (7)
template <class InputIterator>
   void insert (iterator p, InputIterator first, InputIterator last);
在p处插入一个从first到last(last处取不到)的一个字符串
4.5 erase
sequence (1)
 string& erase (size_t pos = 0, size_t len = npos);
从pos处开始删除len个字符(如果len比可删除的字符还要多或者len为npos,有多少删多少)
character (2)
iterator erase (iterator p);
删除p处的一个字符
range (3)
     iterator erase (iterator first, iterator last);
将string对象的first到last(last处取不到)删除
4.6 assign

为string对象指定一个新的字符串,替换当前内容。

注意:这里功能类似于构造函数(初始化),但这不是初始化。

string (1)
string& assign (const string& str);
用对象str构造string对象
substring (2)
string& assign (const string& str, size_t subpos, size_t sublen);
取str从subpos开始的sublen个字符(如果sublen比可取的字符数量多或sublen为npos,则有多少取多少),构造string对象
c-string (3)
string& assign (const char* s);
用C-string构造string对象
buffer (4)
string& assign (const char* s, size_t n);
取s开始的前n个字符,构造string对象
fill (5)
string& assign (size_t n, char c);
用连续的n个字符c构造string对象
range (6)
template <class InputIterator>
   string& assign (InputIterator first, InputIterator last);
用从first到last(last指向的位置取不到)的子串构造string对象
4.7 replace
string (1)
string& replace (size_t pos,  size_t len,  const string& str);
string& replace (iterator i1, iterator i2, const string& str);
substring (2)
string& replace (size_t pos,  size_t len,  const string& str,
                 size_t subpos, size_t sublen);
c-string (3)
string& replace (size_t pos,  size_t len,  const char* s);
string& replace (iterator i1, iterator i2, const char* s);
buffer (4)
string& replace (size_t pos,  size_t len,  const char* s, size_t n);
string& replace (iterator i1, iterator i2, const char* s, size_t n);
fill (5)
string& replace (size_t pos,  size_t len,  size_t n, char c);
string& replace (iterator i1, iterator i2, size_t n, char c);
range (6)
template <class InputIterator>
  string& replace (iterator i1, iterator i2,
                   InputIterator first, InputIterator last);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytest + yaml 框架 - 65.Pycharm 设置 yaml 格式用例模板,高效写用例

前言 初学者对yaml 格式不太熟悉,自己写yaml用例的时候,总是格式对不齐,或者有些关键字会忘记。 于是我们可以在pycharm上设置用例模块,通过快捷方式调用出对应的模块,达到高效写用例的目的。 pycharm设置用例模板 File - Settings Live Templates - python 点 + 号…

【react小项目】bmi-calculator

bmi-calculator 目录 bmi-calculator初始化项目01大致布局01代码 02完善样式02代码 03输入信息模块03代码 04 使用图表04代码 05详细记录信息渲染05代码 06 让数据变成响应式的06-1输入框的数据处理06-2图表&#xff0c;和记录信息的区域数据处理 07 删除功能&#xff0c;撤销功…

521. 最长特殊序列 Ⅰ

题目 给你两个字符串 a 和 b&#xff0c;请返回这两个字符串中最长的特殊序列的长度。如果不存在&#xff0c;则返回 -1。 「最长特殊序列」定义如下&#xff1a;该序列为某字符串独有的最长子序列&#xff08;即不能是其他字符串的子序列&#xff09;。 字符串 s 的子序列是…

介绍 Whisper 模型

介绍 Whisper 模型 Whisper 是一个通用的语音识别模型。它在大规模多样化的音频数据集上进行训练&#xff0c;并且能够执行多任务处理&#xff0c;包括多语言语音识别、语音翻译和语言识别。 核心方法 Whisper 使用的是 Transformer 序列到序列模型&#xff0c;训练于多种语…

vue项目问题汇总

1.el-select&#xff1a; 下拉框显示到了top:-2183px , 添加属性 :popper-append-to-body"false" 2. el-upload: 选过的文件在使用过后记得清空&#xff0c;因为如果有limit1的时候&#xff0c;没有清空会导致不触发onchange 使用自定义上传方法http-request的时…

基于android开发平台的聊天软件实现(论文+源码)_kaic

摘要&#xff1a;互联网时代的到来使得手机通讯变得更为普及和强大&#xff0c;人们可以随时随地地进行交流。由于工作的繁忙以及生活节奏的加快&#xff0c;人们无法有更多时间展开面对面的交谈&#xff0c;导致在线聊天软件的使用更加频繁&#xff0c;所以本文尝试设计了一款…

Excel报表

(Apache POI) 入门案例 P164 使用POI需要导入下面2个坐标&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId> </dependency> <dependency><groupId>org.apache.poi</groupId>&…

docker-compose部署FastDFS分布式文件系统

文章目录 一、技术选型二、fastDFS组成部分三、docker-compose文件四、客户端nginx配置五、存储器spring Boot集成参考文献 一、技术选型 还有一个更好的google FS&#xff08;但是他不开源&#xff0c;我也没找到社区版一类的可以不要钱使用的&#xff09;。 最后考虑到我们存…

AD学习记录

1. 负信号&#xff1a; \WR或者W\R\ 2.快捷键&#xff1a; MMS VGS X/W CTLRW原理图画总连接线&#xff0c;shift快速复制 TAA管理器&#xff0c;TG封装管理器 3. 选中后按住ctlr进行位移 4.原理图里切换原理图库&#xff1a; 5.重要警报&#xff1a;&#xff0…

CleanMyMacX4.15.4如何优化苹果电脑系统缓存,告别MacBook卡顿,提升mac电脑性能

你是否曾为苹果电脑存储空间不够而烦恼&#xff1f;是否曾因系统运行缓慢而苦恼&#xff1f;别担心&#xff0c;今天我要给大家种草一个神器——CleanMyMac&#xff01;这款软件可以帮助你轻松解决苹果电脑的种种问题&#xff0c;让你的电脑焕然一新&#xff01; 让我来给大家介…

论文学习day01

1.自我反思的检索增强生成&#xff08;SELF-RAG&#xff09; 1.文章出处&#xff1a; Chan, C., Xu, C., Yuan, R., Luo, H., Xue, W., Guo, Y., & Fu, J. (2024). RQ-RAG: Learning to Refine Queries for Retrieval Augmented Generation. ArXiv, abs/2404.00610. 2.摘…

使用消息队列(MQ)实现MySQL持久化存储与MySQL server has gone away问题解决

在现代应用程序开发中&#xff0c;消息队列&#xff08;MQ&#xff09;扮演着重要的角色。它们可以帮助我们解决异步通信和解耦系统组件之间的依赖关系。而其中一个常见的需求是将消息队列中的数据持久化到数据库中&#xff0c;以确保数据的安全性和可靠性。在本文中&#xff0…

java第二十四课 —— super 关键字 | 方法重写

super 关键字 基本介绍 super 代表父类的引用&#xff0c;用于访问父类的属性、方法、构造器。 基本语法 访问父类的属性&#xff0c;但不能访问父类的 private 属性。 super.属性名; 访问父类的方法&#xff0c;不能访问父类的 private 方法。 super.方法名(参数列表); 访…

Java的一些内容

transient的作用 transient是Java语言的关键字&#xff0c;用来表示一个成员变量不是该对象序列化的一部分。当一个对象被序列化的时候&#xff0c;transient型变量的值不包括在序列化的结果中。而非transient型的变量是被包括进去的。 注意static修饰的静态变量天然就是不可序…

Python **运算符(python**kwargs:参数解包)(kwargs:keyword arguments)

文章目录 Python中的 ** 运算符&#xff1a;参数解包参数解包基础语法和示例 在函数定义中使用 **示例代码 使用场景和好处1. 灵活性&#xff1a;使用 **kwargs 允许函数设计得更加灵活&#xff0c;可以接受未来可能增加的新参数而无需修改函数定义。2. 可读性和可维护性&#…

C#开发-集合使用和技巧(四)集合中常用的查询方法

集合中常用的查询方法 测试数据准备&#xff1a;查询方法详解**Where**条件查询定义和注释&#xff1a;功能详细说明&#xff1a;应用实例查找所有设备类型为“生产设备”的对象 结果测试&#xff1a;查询所有测试结果大于90的设备多条件查询&#xff1a;类型为生产设备同时测试…

# RocketMQ 实战:模拟电商网站场景综合案例(六)

RocketMQ 实战&#xff1a;模拟电商网站场景综合案例&#xff08;六&#xff09; 一、RocketMQ 实战 &#xff1a;项目公共类介绍 1、ID 生成器 &#xff1a;IDWorker&#xff1a;Twitter 雪花算法。 在 shop-common 工程模块中&#xff0c;IDWorker.java 是 ID 生成器公共类…

Centos7系统下Docker的安装与配置

文章目录 前言下载Docker安装yum库安装Docker启动和校验配置Docker镜像加速卸载Docker 前言 此博客的内容的为自己的学习笔记&#xff0c;如果需要更具体的内容&#xff0c;可查看Docker官网文档内容 注意&#xff1a;以下命令在root管理员用户下运行&#xff0c;如果在普通用…

基于单片机的无线遥控自动翻书机械臂设计

摘 要&#xff1a; 本设备的重点控制部件为单片机&#xff0c;充分实现了其自动化的目的。相关研究表明&#xff0c;它操作简单便捷&#xff0c;使残疾人在翻书时提供了较大的便利&#xff0c;使用价值性极高&#xff0c;具有很大的发展空间。 关键词&#xff1a; 机械臂&…

gbase8s数据库阻塞检查点和非阻塞检查点的执行机制

1. 检查点的描述 为了便于数据库系统的复原和逻辑恢复&#xff0c;数据库服务器生成的一致性标志点&#xff0c;称为检查点&#xff0c;其是建立在数据库系统的已知和一致状态时日志中的某个时间点检查点的目的在于定期将逻辑日志中的重新启动点向前移动 如果存在检查点&#…