string类的使用手册

news2024/11/26 2:25:58

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.coloradmin.cn/o/1827403.html

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

相关文章

python 实现各种数据分析方法

1、相关性分析 1.1、https://zhuanlan.zhihu.com/p/669355778https://zhuanlan.zhihu.com/p/669355778

【AI学习】Together AI的新研究:Together MoA(Mixture of Agents)

第一次听说Mixture of Agents&#xff0c;原来Agent也能混合&#xff0c;有意思&#xff01; 介绍 Together AI的最新研究“Together MoA”&#xff08;Mixture of Agents&#xff0c;代理混合&#xff09;是一种创新的方法&#xff0c;旨在通过结合多个开源大型语言模型&…

Postman使用教程(Postman详细图文教程)

本文讲解的是postman工具安装、postman安装教程、postman工具下载、postman使用教程。Postman使得得开发人员和测试人员能够更高效地与Web服务进行交互和调试。 Postman不仅支持常见的HTTP方法&#xff0c;如GET、POST、PUT、DELETE等&#xff0c;还提供了丰富的请求编辑功能&…

Linux---防火墙

文章目录 目录 文章目录 前言 一.静态防火墙&#xff1a;iptables iptables五链 iptables 四表 iptables控制类型 iptables命令配置 前言 这儿主要介绍Linux系统本身提供的软件防火墙的功能&#xff0c;即数据包过滤机制。 数据包过滤&#xff0c;也就是分析进入主机的网络数…

Ubuntu20.04配置ORBSLAM2并在kitti数据集序列进行实验

一、ORB-SLAM2 安装和编译 1.ORB-SLAM2下载 用以下命令在终端上下载 git clone https://github.com/raulmur/ORB_SLAM2 2.安装Pangolin 在下载了ZIP压缩包后解压缩放在ubantu的/home下&#xff08;此处只要是英文路径都可以&#xff09;&#xff0c;但别急着安装Pangolin我…

STM32项目分享:智慧农业(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

PCIe总线-RK3588 PCIe子系统简介(八)

1.PCIe子系统 RK3588 PCIe子系统如下图所示。总共拥有5个PCIe控制器。PCIe30X4(4L)支持RC和EP模式&#xff0c;其他4个仅支持RC模式。ITS port 1连接PCIe30X4(4L)和PCIe30X2(2L)控制器&#xff0c;PCIe30X4(4L)和PCIe30X2(2L)控制器使用PCIe3.0 PIPE PHY。ITS port 0连接PCIe3…

mysql:简单理解mysql mvcc的可重复读

# 原理 假设有这样的sql begin select&#xff08;或update、insert、delete&#xff09; ... commit当执行【begin】的时候&#xff0c;标记有一个新事务要开始&#xff0c;但是事务还没有真正开始&#xff0c;事务id还没有产生当执行事务里面的第一个sql语句时&#xff08;…

VCG显示——汉字,数字,图像

详细的介绍资料&#xff1a; 【从零开始走进FPGA】 玩转VGA http://www.cnblogs.com/spartan/archive/2011/08/16/2140546.html 【FPGA实验】基于DE2-115平台的VGA显示_vga接口实验 de2-115-CSDN博客 【FPGA】VGA显示文字、彩条、图片——基于DE2-115-CSDN博客 一.VCG原理 1.1…

区块链中的gas与转账收款相关概念

区块链是一个经济系统 计算与存储系统都是稀缺的&#xff0c;区块链的工作需要消耗资源共识、trustless需要矿工的工作&#xff0c;而矿工需要激励Transaction的执行有成本&#xff08;gas&#xff09;,gas费成为矿工的奖励ether是这个经济生态系统的通行货币 关心的问题 合…

Stable Diffusion vs DALL·E3

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

父亲节:我要做爸爸的健康监督员

父亲节将至&#xff0c;总想着能为爸爸做些什么&#xff0c;来表达我们的感激与关爱。在这个特殊的日子里&#xff0c;成为爸爸的健康监督员&#xff0c;用华为 Watch 4 的智慧健康功能&#xff0c;任何时刻都可以关注爸爸的健康状况&#xff0c;放心又安心了。 用一键微体检…

C++ 50 之 继承中的对象模型

继承中的对象模型 在C编译器的内部可以理解为结构体&#xff0c;子类是由父类成员叠加子类新成员而成&#xff1a; #include <iostream> #include <string> using namespace std;class Base03{ public:int m_a; protected:int m_b; private:int m_c; // 哪怕是…

DNS域名解析----分离解析、多域名解析、父域与子域

1 理论部分 1.1 分离解析 DNS的分离解析&#xff0c;是指根据不同的客户端提供不同的域名解析记录。来自不同地址的客户机请求解析同一域名时&#xff0c;为其提供不同的解析结果。也就是内外网客户请求访问相同的域名时&#xff0c;能解析出不同的IP地址&#xff0c;实现负载…

汇编:Linux汇编基本框架与系统调用

在Linux操作系统下进行汇编编程时&#xff0c;基本的汇编程序框架通常包括以下几个部分&#xff1a; ①全局段声明&#xff08;section declarations&#xff09;&#xff1a;定义数据段、代码段等。 ②入口点&#xff08;entry point&#xff09;&#xff1a;程序的执行起点…

Python 显示笔记本电脑的电池状态和百分比

方法一&#xff1a; import psutil import psutil battery psutil.sensors_battery() if battery is None:print("No battery is found.")exit() print (battery) percentagebattery.percent print(f"Battery Percentage: {percentage}%")Battery的信息…

一个在C#中集成Python的例子

一个在C#中集成Python的例子。在C#中可以执行Python脚本&#xff0c;在Python中也可以调用C#宿主中的功能&#xff08;clr.AddReference(Business)&#xff09;。 文件说明 Debug为执行目录 Mgr.exe为执行文件 Py\init.py为python初始化脚本 Py\Lib.zip为python需要的模块&…

数据库 | 期末复习专题(HBUT 韩洪木)

总结&#xff1a; 考研数据库系统概论题目整理_若视图的属性来自聚集函数、表达式,则该视图是可以更新的。-CSDN博客 数据库系统概论 ---知识点大全&#xff08;期末复习版&#xff09;_数据库系统概论期末复习-CSDN博客 1.数据库系统&#xff08;DBS&#xff09;的组成&#…

第一篇:容器化的未来:从Docker的革命到云原生架构

容器化的未来&#xff1a;从Docker的革命到云原生架构 1. 引言 在当今快速演进的技术领域&#xff0c;容器化技术已经成为云计算和微服务架构的重要组成部分。该技术以其高效的资源利用率、快速的部署能力和卓越的隔离性能&#xff0c;彻底改变了软件开发和部署的方式。容器化…

【Pytorch】一文向您详细介绍 model.eval() 的作用和用法

【Pytorch】一文向您详细介绍 model.eval() 的作用和用法 下滑查看解决方法 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕…