【STL】string类(中)

目录

1,rbegin 和 rend

2,reserve & capacity

3,max_size ( )

4,size()& resize

1,void resize (size_t,char c)

5,push_back & append

1,追加字符串范围

2,直接追加


1,rbegin 和 rend

具体详情:cplusplus.com/reference/string/string/rbegin/

#include<iostream>
#include<string>
using namespace std;int main()
{string s1("hello world");string::reverse_iterator it = s1.rbegin();while (it != s1.rend()){cout << *it << " ";it++;}return 0;
}

其实也就是逆置打印字符串;

而且缺点也很明显,类型太长了不便于书写;

所以 auto 的好用之处就体现出来了,自动帮我们推算类型;

int main()
{string s1("hello world");//string::reverse_iterator it = s1.rbegin();auto it = s1.rbegin();while (it != s1.rend()){cout << *it << " ";it++;}return 0;
}

这样就更 OK 了;

还有一个冷门不常用的,就是 crengin 代替 rengin ,crend 代替 crend ;

int main()
{string s1("hello world");//string::reverse_iterator it = s1.crbegin();auto it = s1.crbegin();while (it != s1.crend()){cout << *it << " ";it++;}return 0;
}

2,reserve & capacity

reserve:更改容量,需要多少空间,提前开好即可

capacity:返回空间总大小

int main()
{string s1;string s2("hello world");//初始容量大小cout << s1.capacity() << endl;cout << s2.capacity() << endl;cout << endl;s1.reserve(20);s2.reserve(30);//当 n>容量大小cout << s1.capacity() << endl;cout << s2.capacity() << endl;cout << endl;s1.reserve(5);s2.reserve(5);//当 n<容量大小cout << s1.capacity() << endl;cout << s2.capacity() << endl;return 0;
}

小伙伴们会好奇,为什么扩容的容量不跟我们指定的容量相同;

那是因为编译器有自己的一套扩容机制;

int main()
{string s1;string s2("hello world");int doll = s1.capacity();cout << s1.capacity() << endl;int i = 1000;while (i--){s1 += ' ';if (doll != s1.capacity()){cout << s1.capacity() << endl;doll = s1.capacity();}}return 0;
}

基本上是按 1.5 倍扩增的,除了刚开始的;

所以空间容量只会在这些值里面,就算是 16 也直接扩容至下一阶段 31,其实是 32,因为还有一个 ' \0 ' ;

当扩容之后的量大于当前的容量则扩大;

当扩容之后的量小于当前真实容量则不变,否则缩小;

string s2("hello world") 里面的 " hello world " 真实容量就是11;

3,max_size ( )

算出字符串所能开辟的最大空间

int main()
{string s1;string s2("hello world");cout << s1.max_size() << endl;cout << s2.max_size() << endl;return 0;
}

由上可得 string类所能开辟的最大空间都是一样的;

但是所能开辟的最大空间并不是真的能开辟,我们来看一段代码;

int main()
{string s1;string s2("hello world");cout << s2.capacity() << endl;cout << s2.max_size() << endl;s2.reserve(s2.max_size());cout << s2.capacity() << endl;return 0;
}

上面开最大空间的容量的时候,运行直接崩溃的,根本开不出来; 

真实的话是开不出来的,这仅供参考,不必当真;

4,size()& resize

size():返回字符串有效长度

resize():将有效字符的个数该成n个,多出的空间用字符 c 填充

我们直接来看一段代码

int main()
{string s1;string s2("hello world");//打印有效字符长度和容量大小cout << s1.size() << " " << s1.capacity() << endl;cout << s2.size() << " " << s2.capacity() << endl;cout << endl;s1.resize(20);s2.resize(30);//有效字符对容量的影响cout << s1.size() << " " << s1.capacity() << endl;cout << s2.size() << " " << s2.capacity() << endl;cout << endl;s1.resize(5);s2.resize(8);//cout << s1.size() << " " << s1.capacity() << endl;cout << s2.size() << " " << s2.capacity() << endl;cout << endl;s1.reserve(100);s2.reserve(200);//容量对有效字符的影响cout << s1.size() << " " << s1.capacity() << endl;cout << s2.size() << " " << s2.capacity() << endl;return 0;
}

由上可得,有效字符 size 的长度会影响 capacity 容量,但是 capacity 容量的大小不会影响 有效字符 size ;

而且 字符串有效字符长度会随着 size 的变化而变化即使是缩小,但是容量不会改变,以后可以用于【删除数据,保留前 n 个】

1,void resize (size_t,char c)

扩增加尾插

int main()
{string s1;string s2("hello world");s1.resize(10, 'y');s2.resize(20,'x');cout << s2 << endl;cout<< s1 << endl;return 0;
}

这个我们以后可以用作给字符串赋值和初始化;

5,push_back & append

push_back :在字符串后尾插字符c

append:在字符串后追加一个字符串

直接上代码:

int main()
{string s1;string s2("hello world");s1.push_back('x');s2.push_back('y');cout << s1 << endl;cout << s2 << endl;cout << endl;s2.append("hello world");s2.append("hello wprld");cout << s1 << endl;cout << s2 << endl;return 0;
}

1,追加字符串范围

string& append(inputiterator first,inputiterator last);

int main()
{string s1("abcdefg");string s2("hello world");s1.append(s2.begin(), s2.end());cout << s1 << endl;cout << endl;string s3("abcdefg");s2.append(++s3.begin(), --s3.end());cout << s2 << endl;return 0;
}

直接范围也是可以的,还可以 ++,--;

int main()
{string s1;string s2("hello world");s1.append(s2,2,7);s2.append(10, 'x');cout << s1 << endl;cout << s2 << endl;return 0;
}

 指定也是可以的,用法有很多更 string类的用法类似,大家可以去查查文档的各种用法;

2,直接追加

int main()
{string s1;string s2("hello world");s1 += 'x';s2 += " abcdefg";cout << s1 << endl;cout << s2 << endl;return 0;
}

直接 追加也可以,更简便;

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

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

相关文章

城市生命线丨桥梁健康结构监测系统作用如何

截至2022年底&#xff0c;我国拥有公路桥梁103.3万座&#xff0c;总长约8576万延米&#xff0c;其中特大桥8816座&#xff0c;总长约1621万延米。 为了确保这些桥梁的安全&#xff0c;需要进行定期的检测和维护&#xff0c;及时发现和解决桥梁存在的问题。 同时&#xff0c;政…

Servlet---HttpServlet、HttpServletRequest、HttpServletResponseAPI详解

文章目录 HttpServlet基础方法doXXX方法Servlet的生命周期 HttpServletRequest获取请求中的信息获取请求传递的参数获取 query string 里的数据获取form表单里的数据获取JSON里的数据如何解析JSON格式获取数据返回数据 HttpServletResponse设置响应的Header设置不同的状态码设置…

【Redis】持久化-RDBAOF混合持久化

文章目录 前置知识RDB&#xff08;定期备份&#xff09;触发机制流程说明RDB文件的处理RDB 的优缺点 AOF&#xff08;实时备份&#xff09;使用AOF命令写入AOF工作流程文件同步重写机制重写触发机制AOF进制重写流程 混合持久化启动时数据恢复 总结 前置知识 回顾MySQL MySQL的事…

LeetCode(28)盛最多水的容器【双指针】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 盛最多水的容器 1.题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水…

对线程的创建

一&#xff0c;概括 二&#xff0c;线程构建方式一&#xff08;继承Thread类&#xff09; 三&#xff0c;案例 父类&#xff1a; package Duoxiancheng;public abstract class Name {public static void main(String[] args) {//3&#xff0c;创建一个Thread线程类对象Thr…

汇编语言学习笔记

汇编语言的不同种类 as86汇编&#xff1a;能产生16位代码的Intel 8086汇编 mov ax, cs //cs→ax&#xff0c;目标操作数在前GNU as汇编&#xff1a;产生32位代码&#xff0c;使用AT&T系统V语法 movl var&#xff0c; %eax // var→%eax&#xff0c;目标操作数在后内嵌汇编…

基于Qt的UDP通信、TCP文件传输程序的设计与实现——QQ聊天群聊

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言一…

Selenium 元素不能定位总结

目录 元素不能定位总结: 1、定位语法错误&#xff1a; 定位语法错误&#xff0c;如无效的xpath&#xff0c;css selector,dom路径错误&#xff0c;动态dom 定位语法错误&#xff0c;动态路径&#xff08;动态变化&#xff09; 定位策略错误&#xff0c;如dom没有id用id定位…

vue history路径编码

记录今天遇到的一个问题&#xff1a; 问题现状 有一个需要前端伪造302进行重定向的需求&#xff0c;我们需要将这样的一个路径&#xff1a;http://xxx.com/system-name/#/index&#xff0c;拼接在跳转地址的后面&#xff0c;进行重定向。拼接的方式是这样的&#xff1a; htt…

攻防世界-web-Confusion1

1. 题目描述 打开链接&#xff0c;如图 点击Login和Rigister&#xff0c;都报错 但是有提示 指出了flag所在的位置&#xff0c;题目中直接能获取到的信息暂时就这么些了 2. 思路分析 既然告诉了我们flag文件的位置&#xff0c;那么要读取到这个文件&#xff0c;要么是任意文…

AI辅助带货直播场景源码系统 附带网站的搭建教程

互联网技术的发展和普及&#xff0c;直播带货行业迅速崛起。然而&#xff0c;直播带货在带来商机的同时&#xff0c;也面临着诸多挑战。如直播内容缺乏新意、转化率低等问题。针对这些问题&#xff0c;AI辅助带货直播场景源码系统应运而生&#xff0c;旨在利用人工智能技术&…

对接苹果支付退款退单接口

前言 一般而言&#xff0c;我们其实很少对接退款接口&#xff0c;因为退款基本都是商家自己决定后进行操作的&#xff0c;但是苹果比较特殊&#xff0c;用户可以直接向苹果发起退款请求&#xff0c;苹果觉得合理会退给用户&#xff0c;但是目前公司业务还是需要对接这个接口&am…

试试MyBatis-Plus可视化代码生成器,太香了,你一定会感谢我

前言 在基于Mybatis的开发模式中&#xff0c;很多开发者还会选择Mybatis-Plus来辅助功能开发&#xff0c;以此提高开发的效率。虽然Mybatis也有代码生成的工具&#xff0c;但Mybatis-Plus由于在Mybatis基础上做了一些调整&#xff0c;因此&#xff0c;常规的生成工具生成的代码…

PC端使子组件的弹框关闭

子组件 <template><el-dialog title"新增部门" :visible"showDialog" close"close"> </el-dialog> </template> <script> export default {props: {showDialog: {type: Boolean,default: false,},},data() {retu…

Java面向对象(高级)-- 类中属性赋值的位置及过程

文章目录 一、赋值顺序&#xff08;1&#xff09;赋值的位置及顺序&#xff08;2&#xff09;举例&#xff08;3&#xff09;字节码文件&#xff08;4&#xff09;进一步探索&#xff08;5&#xff09;最终赋值顺序&#xff08;6&#xff09;实际开发如何选 二、(超纲)关于字节…

1992-2021年省市县经过矫正的夜间灯光数据(GNLD、VIIRS)

1992-2021年省市县经过矫正的夜间灯光数据&#xff08;GNLD、VIIRS&#xff09; 1、时间&#xff1a;1992-2021年3月&#xff0c;其中1992-2013年为年度数据&#xff0c;2013-2021年3月为月度数据 2、来源&#xff1a;DMSP、VIIRS 3、范围&#xff1a;分区域汇总&#xff1a…

SpringBoot : ch05 整合Mybatis

前言 随着Java Web应用程序的快速发展&#xff0c;开发人员需要越来越多地关注如何高效地构建可靠的应用程序。Spring Boot作为一种快速开发框架&#xff0c;旨在简化基于Spring的应用程序的初始搭建和开发过程。而MyBatis作为一种优秀的持久层框架&#xff0c;提供了对数据库…

【Linux】-进程间通信-共享内存(SystemV),详解接口函数以及原理(使用管道处理同步互斥机制)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

中低压MOSFET 2N7002T 60V 300mA 双N通道 采用SOT-523封装形式

2N7002KW小电流双N通道MOSFET&#xff0c;电压60V电流300mA&#xff0c;采用SOT-523封装形式。低Ros (on)的高密度单元设计&#xff0c;坚固可靠&#xff0c;具有高饱和电流能力&#xff0c;ESD防护门HBM2KV。可应用于直流/直流转换器&#xff0c;电池开关等产品应用上。

成为AI产品经理——AI产品经理工作全流程

一、业务背景 背景&#xff1a;日常排球训练&#xff0c;中考排球项目和排球体测项目耗费大量人力成本和时间成本。 目标&#xff1a;开发一套用于实时检测排球运动并进行排球垫球计数和姿势分析的软件。 二、产品工作流程 我们这里对于产品工作流程的关键部分进行讲解&…