C++ string类—容量、元素获取

news2024/9/20 1:10:47

一、Capacity

  • size:string类对象中字符的个数为size;
  • length:size作用一样,返回string对象中有效数据个数;
  • capacity:一个string对象的容量capacity决定了这个对象能存储多少字符(不包括'\0');
  • max_size:表示这个string类的对象能存储的最大字符个数;
  • resize:将一个string类对象的size值进行重新赋值:给定的值比size小,那么就减少string类中的数据;给定的值比size大,没有给增加的具体数据值,默认为空字符,给了具体值,那么增加的size的位置就是这些值;
  • reserve:重新设置capacity的值:若是重新给定的值比原capacity大,那么就扩大capacity,并且优化大小;若是比原capacity小或者介于size和capacity之间,在VS中默认capacity的值不变;
  • clear:清楚字符,使size为0;
  • empty:检查string对象中是否含有字符,即判空;
  • shrink_to_fit:将capacity的值调整为size;

###代码示例:

//capacity
void Capacity_Test()
{
	string s1("Capacity Test");
	//size和 length 都是返回这个字符串的字符个数
	cout <<"size:" << s1.size() << endl;
	cout <<"length:" << s1.length() << endl;
	cout << endl;

	//max_size返回这个字符串能达到的最大长度
	cout <<"max_size:" << s1.max_size() << endl;
	cout << endl;

	//resize改变 size 直到一个指定值,也就是有效字符个数
	s1.resize(12);
	cout << s1 << endl;
	//若是增大,可以设置增大位置的值,不设置,那么默认是空字符,但是不会占位
	s1.resize(13, 't');
	cout << s1 << endl;
	s1.resize(14);//理论上14处是空字符,后面再 resize 之后打印此处会留一个空格,但是这个空字符不占位
	s1.resize(20, 'i');
	cout << s1 << endl;
	cout << endl;

	//capacity表示字符串的容量,不算'\0'
	cout <<"capacity:" << s1.capacity() << endl;
	//观察插入字符之后,capacity的扩容
	string s2;
	for (int i = 0; i < 100; i++)
	{
		s2 += 'x';
		if (s2.capacity() == s2.size())
		{
			cout << s2.capacity() << " ";
		}
	}
	cout << s2.capacity() << endl;
	cout << endl;

	//reserve表示容量设置
	string s3("Reserve Test");
	cout <<"capacity:" << s3.capacity() << endl;
	cout <<"size:" << s3.size() << endl;
	s3.reserve(13);//VS里面 reverse 的比 capacity 小,一律不改变 capacity,比 capacity 大,会扩大并且可以优化大小
	cout <<"capacity:" << s3.capacity() << endl;
	s3.reserve(30);
	cout << "capacity:" << s3.capacity() << endl;
	cout << endl;

	//clear表示清空 size
	string s4("Clear Test");
	cout <<"size:" << s4.size() << endl;
	s4.clear();
	cout <<"size:" << s4.size() << endl;
	cout << "capacity:" << s4.capacity() << endl;
	cout << endl;

	//empty判空,即看 size 是否为0 (true if the string length is 0, false otherwise)
	string s5("Empty Test");
	s5.empty() ? cout << "true" << endl : cout << "false"<<endl;
	string s6;
	s6.empty() ? cout << "true" << endl : cout << "false" << endl;
	cout << endl;

	//shrink_to_fit表示将 capacity 调整为 size 大小。但是不是强制性的,在VS里面将 capacity 不会比当前的值小
	string s7("Shrink_To_Fit_Test");
	cout << "size:" << s7.size() << endl;
	cout << "capacity:" << s7.capacity() << endl;
	s7.shrink_to_fit();
	cout << "capacity:" << s7.capacity() << endl;
	cout << endl;
}

###运行结果:


二、Element access

这些成员函数是获取string类里面的元素的;

  • operator[]:重载[],使string对象可以通过[]加下标的方式访问string里面的元素;
  • at:和operator[]类似,但是访问元素时写成,s1.at(0)(s1为string对象,0为下标);
  • front:获取string类对象的第一个数据;
  • back:获取string对象的最后一个有效数据;

###代码示例:

void Element_access()//此中的函数返回值都是引用,所以可以通过返回值改变原字符串中对应的字符;但若是 const 限制的就不能改变
{
	//operator[]
	cout << "operator测试:" << endl;
	//重载[],让字符串可以通过下标的方式访问字符
	string s1("Operator_Test");
	// 输出O,第一个字符
	cout << s1[0] << endl;
	//若是'\0',则输出空字符
	cout << s1[s1.size()] << endl; 
	//非 const 的 string 类可以通过下标改变此处的字符
	s1[0] = 'L';
	cout << s1 << endl;
	//const类型的 string 不能通过改变
	const string s2(s1);
		//s2[0] = 'O'; //报错
	cout << endl;

	//at
	cout << "at测试:" << endl;
	//at通过下标访问,越界则会引发异常(out_of_range)
	string s3("At_Test");
	for (size_t i=0;i<s3.size();i++)
	{
		cout << s3.at(i);
	}
	cout << endl;
		//s3.at(100) = 'i';
	s3.at(0) = 'X';
	cout << s3 << endl;
	cout << endl;

	//back
	//back返回 string 类对现象的最后一个有效字符;不能使用在空字符串上面
	cout << "back测试:" << endl;
	string s4("Hello World.");
	cout << s4 << endl;
	s4.back() = '!';
	cout << s4 << endl;
	//若是空的 string 类,则报错(call on empty string)
		//string s5;
		//cout << s5.back() << endl;
	cout << endl;

	//front 
	//返回 string 类对象中的第一个字符,若是空 string 对象,报错
	string s6("front_Test");
	cout << s6 << endl;
	s6.front() = 'F';
	cout << s6 << endl;
}

###运行结果:

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

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

相关文章

活动系统开发之采用设计模式与非设计模式的区别-需求整理

用户需求(活动系统)&#xff1a; 1、活动类型&#xff1a;答题、图片展示、签到、抽奖、组团等活动 2、活动介绍&#xff1a; a、答题活动&#xff1a; 第一种是签到后&#xff0c;随机抽取10道题&#xff0c;答对8到就可以抽奖&#xff1b; 第二种是随机抽取一道题&#xff0…

Python优化算法24——基于觅食生境选择的粒子群算法(FHSPSO)

科研里面优化算法都用的多&#xff0c;尤其是各种动物园里面的智能仿生优化算法&#xff0c;但是目前都是MATLAB的代码多&#xff0c;python几乎没有什么包&#xff0c;这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考&#xff1a;Python优化算…

c/c++基础及类和对象汇总

目录 c基础 extern关键字及c中&#xff08;隐式类型转换时&#xff09;的引用 c中的引用&#xff08;&&#xff09;及&做返回值问题 c语言中的宏函数及c的内联函数及auto及NULL 计算类的大小及深入理解this指针&#xff08;深入浅出&#xff09; c中的const权限及s…

C语言典型例题58

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题4.10 求100~200中的全部素数。 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //例题4.10 求100~200中的全部素数。#include <stdio.h> #include <math.h>int m…

python学习11-Pytorch环境安装与模型搭建

先查看下自己的电脑是否是英伟达显卡 如果不是就需要租用平台了,如 AutoDL算力云 https://www.autodl.com/home CUDA 当涉及到深度学习和 Python 时&#xff0c;CUDA 是一个非常重要的概念&#xff0c;它是 NVIDIA 开发的并行计算平台和应用程序编程接口&#xff08;API&am…

【WiFi主要技术学习2】

WiFi协议学习2 WiFi SPEC理解频段信道带宽协商速率安全与加密WiFi主要技术理解BP直接序列扩频(Direct Sequence Spread Spectrum,DSSS)BPSKQPSK正交幅度调制(Quadrature Amplitude Modulation,QAM)互补码键控(Complementary Code Keying,CCK)正交频分复用(Orthogonal…

如何选择合适的JDK:功能、性能与适用场景的全面解析

如何选择合适的JDK&#xff1a;功能、性能与适用场景的全面解析 前言 在 Java 开发领域&#xff0c;开发者有众多的 JDK 选择&#xff0c;如 OpenJDK、GraalVM、Oracle JDK、Dragonwell、Kona、Bisheng、Corretto、Zulu、Liberica、SapMachine、Semeru、Temurin、Mandrel等。 …

YOLOv8改进 | Conv篇 | YOLOv8引入SAConv模块

1. SAConv介绍 1.1 摘要: 许多现代物体检测器通过使用三思而后行的机制表现出出色的性能。 在本文中,我们在目标检测的主干设计中探索了这种机制。 在宏观层面,我们提出了递归特征金字塔,它将特征金字塔网络的额外反馈连接合并到自下而上的骨干层中。 在微观层面,我们提出…

24数学建模国赛助攻中!!!(11——时间序列模型)

需要资料和助攻的建模宝子们可以加企鹅呢&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;具体方式在文章末尾 点击链接加入群聊获取完整版资料和助攻https://qm.qq.com/q/NGl6WD0Bky

基于微信小程序的挂号管理系统-web管理端

流量和预约挂号数可视化功能 系统具备人流量和预约挂号数的可视化功能&#xff0c;能够实时展示各项数据&#xff0c;通过图表等形式直观呈现。这有助于医疗机构快速了解服务状况&#xff0c;优化资源配置&#xff0c;提升运营效率&#xff0c;为患者提供更为便捷的挂号服务。 …

每天五分钟计算机视觉:Siamese深度神经网络模型和FaceNet的关系

本文重点 在前面的课程中,我们学习了Siamese深度神经网络模型和FaceNet,二者都可以完成人脸识别任务,本文进行整理学习,理清二者的区别和联系。 基本概念与原理 Siamese深度神经网络模型 Siamese网络,又称孪生网络,由两个结构相同且权重共享的神经网络组成。这两个网络分…

[引人深思]博彩用户真的赢了吗?——多维度揭示赌博危害

1.项目背景 博彩业&#xff0c;作为全球经济中一个庞大而复杂的行业&#xff0c;吸引了无数用户参与其中&#xff0c;然而&#xff0c;在巨大的利益诱惑背后&#xff0c;博彩业对个人和社会造成的潜在危害却不容忽视&#xff0c;尽管博彩活动常被包装为“娱乐”或“休闲活动”…

10款文档管理系统,助力降本增效

比较好用的 10 款文档管理系统推荐&#xff1a;PingCode、Worktile、语雀、联想Filez企业网盘、360亿方云、DocuPhase 、M-Files 、LogicalDOC、Revver、Box。 在现代企业环境中&#xff0c;管理大量文档和数据往往让人头疼。不仅需要维护信息的更新和可访问性&#xff0c;还要…

【学习笔记】卫星通信NTN 3GPP标准化进展分析(六)- 参考标准

一、引言&#xff1a; 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划&#xff0c;是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析&#xff08;一&#xff…

【Godot4.3】绘图函数的类化封装尝试——CanvasShape

概述 这是2024年7月份的一项工作&#xff0c;在研究外XML和SVG解析与生成过后&#xff0c;想到可以将自己写的绘图函数库ShapePoints拆分为图形类&#xff0c;于是就有了CanvasShape类。它包含了从填充、轮廓、阴影、虚线、顶点和中心点绘制的全部要素。只需要给定points属性和…

【微处理器系统原理与应用设计】微处理器的基本架构之组成原理和系统结构

本文首先讲解微处理器的重要组成部分&#xff0c;之后会穿插数电的知识进行相关功能电路的设计&#xff0c;以达到从理论到实践的效果。 一. 组成原理 1. 运算器 ALU是微处理器中执行所有算术和逻辑操作的部件。主要的功能是加减乘除&#xff0c;与或非异或比较等。&#xff…

Vue3、ElementPlus速通

Vue基础 Vue介绍 原生的JS在程序开发的过程中书写起来是十分麻烦的&#xff0c;因此很多的前端的框架(半成品)就应运而生了&#xff0c;目前比较知名的是下面三个 Vue是一个用于构建用户界面的渐进式框架&#xff0c;目前企业中流行的版本有两个 入门案例 <!DOCTYPE html…

C++笔记14•二叉树之二叉搜索树•

二叉搜索树 1.二叉搜索树 概念&#xff1a; 二叉搜索树又称二叉排序树也叫二叉查找树&#xff0c;它可以是一棵空树。 二叉树具有以下性质: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都…

小小论坛系统测试报告

1.项目背景 论坛博客系统采用前后端分离的方法来实现&#xff0c;同时使用了数据库来存储相关的数据&#xff0c;同时将其部署到云服务器上。前端主要有四个页面构成&#xff1a;登录页、列表页、详情页以及编辑页&#xff0c;以上模拟实现了简单的论坛系统。其结合后端将支持…

【Bigtop】Ambari2.8.0编译及安装

Ambari2.8.0编译及安装 Ambari2.8.0编译及安装编译Ambari编译Ambari-metrics搭建Ambari镜像准备 Ambari2.8.0编译及安装 编译Ambari 安装必要工具&#xff1a; yum -y install gcc-c git psutils python-devel rpm-build 克隆仓库并切换到2.8.0-rc1分支 git checkout relea…