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.mzph.cn/diannao/28145.shtml

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

相关文章

自动化测试火狐下载文件

本篇文章介绍selenium中火狐浏览器如何下载文件。比如我想把这个MP4的视频文件下载下来。 点击之后查看下载的类型是video/mp4 指定使用火狐浏览器 profile webdriver.FirefoxOptions() # 设置firefox默认的下载路径&#xff0c;0表示桌面&#xff0c;1表示我的下载&#xf…

Qt自定义日志输出

Qt自定义日志输出 简略版&#xff1a; #include <QApplication> #include <QDebug> #include <QDateTime> #include <QFileInfo> // 将日志类型转换为字符串 QString typeToString(QtMsgType type) {switch (type) {case QtDebugMsg: return "D…

Mysql的联合索引

一、前言 上一篇中已经讲过了索引相关的知识&#xff0c;为什么还要在讲一下联合索引&#xff08;二级索引&#xff09;&#xff0c;是因为这个知识点特别重要&#xff0c;不论是在面试中&#xff0c;还是在实际的使用过程中&#xff0c;理解和掌握联合索引&#xff0c;是我们…

回归预测 | Matlab实现GWO-ESN基于灰狼算法优化回声状态网络的多输入单输出回归预测

回归预测 | Matlab实现GWO-ESN基于灰狼算法优化回声状态网络的多输入单输出回归预测 目录 回归预测 | Matlab实现GWO-ESN基于灰狼算法优化回声状态网络的多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现GWO-ESN基于灰狼算法优化回声状态…

DevOps学习回顾01-技能发展路线-岗位能力-体系认知(射箭和拉弓的区别)

事为先&#xff0c;人为重–事在人为 参考来源&#xff1a; 极客时间专栏&#xff1a;DevOps实战笔记&#xff0c;作者&#xff1a;石雪峰 课程链接&#xff1a;https://time.geekbang.org/column/intro/235 时代的典型特征 VUCA VUCA 是指易变性&#xff08;Volatility&…

【MySQL】聊聊数据库是如何保证数据不丢的

对于一个存储系统来说&#xff0c;其中比较关键的核心组件包含&#xff0c;网络、存储模型、持久化、数据结构等。而数据如何保证不丢失&#xff0c;对于不同的存储系统来说&#xff0c;比如Redis采用AOF和RDB的方式进行混合使用&#xff0c;而MySQL采用日志进行保证。也就是re…

MyBatis使用Demo

文章目录 01、Mybatis 意义02、Mybatis 快速入门04、Mapper 代理开发05、Mybatis 配置文件07、查询所有&结果映射08、查询-查看详情09、查询-条件查询10、查询-动态条件查询多条件动态查询单条件动态查询 11、添加&修改功能添加功能修改功能 12、删除功能删除一个批量删…

ubuntu 18.04 安装vnc

如何在Ubuntu 18.04安装VNC | myfreax sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils sudo apt install tigervnc-standalone-server tigervnc-common vncserver sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils sudo apt ins…

滴滴出行 大数据研发实习生【继任】

大数据研发实习生JD 职位描述 1、负责滴滴核心业务的数据建设&#xff0c;设计并打造适应滴滴一站式出行平台业务特点的数仓体系。 2、负责抽象核心业务流程&#xff0c;沉淀业务通用分析框架&#xff0c;开发数仓中间层和数据应用产品。 3、负责不断完善数据治理体系&#xff…

Excel报表

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

uni-app 小程序:显示图片并且点击图片展示大图

效果如图所示&#xff1a; 在页面显示一张图片&#xff0c;然后点击该张图片后显示大图。点击大图就可以关闭大图。 实现的主要代码如下&#xff1a; <image :src"imgpath" mode"aspectFill" click"imgPreview(imgArr)"></image> 其…

Spring Web MVC之过滤器Filter和拦截器HandlerInterceptor的区别和用法

作用时机不一样 Spring 框架有一个很重要的类DispatcherServlet。这个类继承了HttpServlet&#xff0c;HttpServlet实现了Servlet接口。相当于图片中的Servlet。所有和Spring框架相关配置&#xff0c;例如注解、xml配置、其他数据库连接配置、bean配置、拦截器配置等其他配置&…

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

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

【iOS】编译二进制文件说明

编译二进制文件说明 如何生成文件路径文件说明第一部分&#xff1a;.o文件第二部分&#xff1a;link第三部分&#xff1a;Segment第四部分&#xff1a;Symbol 如何生成 使用Xcode进行编译 &#xff0c;会生成二进制相关文件&#xff0c;可以更详细看产物的布局 项目Target -&…

Android中的消息异步处理机制及实现方案

基本介绍 当我们需要执行复杂的计算逻辑&#xff0c;网络请求等耗时操作时&#xff0c;服务器可能不会立即响应请求&#xff0c;如果不将这类操作放在子线程中运行&#xff0c;就会导致主线程被阻塞住&#xff0c;从而影响用户的使用体验如果想要更新应用程序中的UI控件&#…

ASM字节码操纵框架实现AOP

前言 使用ASM改写字节码实现Aop&#xff0c;是最快的Aop实现方式。 我猜你肯定懂AOP 凡是学习Spring框架&#xff0c;必然会深入了解AOP的原理以及实现。这里做下简单总结 Spring默认采取的是动态代理机制实现AOP&#xff0c;当动态代理不可用时&#xff08;代理类无接口&a…

Mac M3 Pro安装Hadoop-3.3.6

1、下载Hadoop安装包 可以到官方网站下载&#xff0c;也可以使用网盘下载 官网下载地址&#xff1a;Hadoop官网下载地址 网盘地址&#xff1a;https://pan.baidu.com/s/1p4BXq2mvby2B76lmpiEjnA?pwdr62r提取码: r62r 2、解压并添加环境变量 # 将安装包移动到指定目录 mv …

FPGA - 数 - 加减乘除

一&#xff0c;数的表示 首先&#xff0c;将二进制做如下解释&#xff1a; 2的0次方1 2的1次方2 2的2次方4 2的3次方8 ..... 以此类推&#xff0c;那么任何整数&#xff0c;或者说任意一个自然数均可以采用这种方式来表示。 例如&#xff0c;序列10101001&#xff0c;根据上述…

Unity贪吃蛇改编【详细版】

Big and small greedy snakes 游戏概述 游戏亮点 通过对称的美感&#xff0c;设置两条贪吃蛇吧&#xff0c;其中一条加倍成长以及加倍减少&#xff0c;另一条正常成长以及减少&#xff0c;最终实现两条蛇对整个界面的霸占效果。 过程中不断记录两条蛇的得分情况&#xff0c…

【Unity】RPG2D龙城纷争(二)关卡、地块

更新日期&#xff1a;2024年6月12日。 项目源码&#xff1a;后续章节发布 索引 简介地块&#xff08;Block&#xff09;一、定义地块类二、地块类型三、地块渲染四、地块索引 关卡&#xff08;Level&#xff09;一、定义关卡类二、关卡基础属性三、地块集合四、关卡初始化五、关…