初识string(一)and内存管理

2024-09-07 02:20
文章标签 初识 内存 string 管理

本文主要是介绍初识string(一)and内存管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对类和对象的补充:缺省参数在函数定义中从右向左依次赋值,如果从右向左有一个参数没有赋值缺省参数,则左边的变量就不能在赋缺省参数,类中的变量可以赋缺省参数并且没有限制。

在类定义中我们总是看到函数后加const。这其实是调用常量类对象或类对象的意思。

一、引言

俗话说“工欲善其事,必先利其器。”一门语言创造的初衷一定是为了交流和记录重要的事。计算机语言肯定也不例外,虽然计算机语言创造的初衷单纯只是为了和计算机交流,让计算机代替人类进行复杂的运算。但渐渐的记录存储功能开始成为计算机的一大功能。计算机毕竟是外国人进行研究的外国人自然而然会为了更好的存储文字、修改文字、加密文字、删除文字创造出新的类。

二、string的介绍

string英文单词的释义是字符串。在C语言中的字符数组要想快速改变内容先不说是否要进行扩容,但是修改值都变得异常困难。所以在C++中提供了string类,方便了字符串的修改与删除。

在此接触string之前,我们先要了解内存管理——new和delete。还有一个operator new用的不是很多了解了解就行。

在C语言中我们用内存管理会用malloc()、calloc()、realloc()、free()等函数在内存的堆区申请空间。并且通过函数的返回值是否为空(NULL)来判断内存是否申请成功。

在C++中我们用new、operator new 、delete操作符进行内存管理。用抛异常来检查申请是否成功。下面是演示new和delete(如果申请的不止一个元素或是对象,析构时delete要则要加[],否则程序可能会崩溃。)操作符用法的代码。使用operrator new()和malloc()函数用法和操作是一样的,申请对应的空间大小强转返回值就行了。此外,new还可以用来申请类和对象空间,并且申请对象也会调用构造函数。

int* ptr = nullptr;
try//检测是否存在抛异常
{ptr = new int[n] {初始化值(如果是一个值初始化时用“()”)};//n为对象的个数
}
catch(const std::exception& e)//检测是否存在抛异常
{std::cout << e.what() << std::endl;
}
delete[] ptr;

下面我们就正式来进入string,首先我们需要包含头文件<string>因为C++有意作区分C语言和C++,所以string没有加.h后缀。

二、1        string文件中的那些函数

stoi()函数相当于C语言中的atoi()函数,将提取字符串的数字。返回值是个int类型。暂时只介绍这一个string文件中的函数。因为它相对于其他函数用的比较多。

二、2        string类对象的那些函数

一个类中一定会有构造函数、拷贝构造函数、析构函数、赋值运算符重载。这里就不一一介绍了。

我们先从最简单的访问函数size()和capacity(),用来访问类中的private变量或函数的数据来介绍。如果没有容积、大小的标示或是标示不统一,所有容器都只能凭借肉眼来一眼丁真。这非常的不方便。所以在string的类中会添加_size和_capacity变量来申请新的内存空间大小、访问内容、调整字符串的长度,同时不能被任意访问或修改,所以在private部分申明。

和字符数组一样,string也可以通过下标访问。另外可以通过string中的resize()函数来调整size的大小

#include<iostream>
#include<string>
int main()
{char ch[10] = "abcdefg";string s1(ch);for(int i = 0;i < s1.size();++i){std::cout << s1[i] << std::endl;}    return 0;
}

insert和erase则是在指定位置之前插入和在指定位置删除,返回值为插入或删除的值所在位置的迭代器。一种类似指针的类型变量我们还应该注意insert()和erase()如果扩容或是删除,可能会导致访问string的迭代器从原本的位置指向其他位置,也就是叫迭代器失效。

//迭代器的英文为iterator,故用它来定义迭代器变量。
//begin()和end()都是返回容器开头和结尾的迭代器函数。
string::iterator (变量名) = (类对象名).begin();
使用示例:
用迭代器打印string中的字符
#include<string>int main()
{std::string s1("abcdefg");std::string::iterator it = s1.begin();while(it != s1.end()){std::cout << it << " ";++it;}return 0;
}

push_back()则是向单个字符元素后插入。

string s1;
s1.push_back('a');

+=则可以向后插入字符串、字符都可以。

std::string s1;
s1 += "abcdefg";
s1 += 'a';

substr()则是对字符串中的开始提取字符,第一个参数是下标,第二个参数则是结束位置的下标。

std::string s1("abcdefg");
//提取s1中的所有字符
std::string s2 = s1.substr(0);
//提取s1中下标为1到下标为三的字符
std::string s3 = s1.substr(1,3);

find()函数则是查找字符串或是字符。第一个参数是字符或字符串,第二个参数则是开始位置的下标。

std::string s1("abcdefg");
//从下标为零的的位置开始查找字符或字符串
size_t pos = s1.find('c');
//从下标为一的的位置开始查找字符或字符串
size_t pos = s1.find('c',1);

c_str()则是返回类对象中的字符串。

std::string s1("abcdefghjijk");
//打印string中的字符串
std::cout << s1.c_str() << std::endl;

这些函数都是需要string类对象用点(.)操作符访问的。

这篇关于初识string(一)and内存管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143778

相关文章

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同