初识string(一)and内存管理

news2025/1/11 10:15:59

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

在类定义中我们总是看到函数后加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类对象用点(.)操作符访问的。

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

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

相关文章

算法备案究竟难在哪里?

算法备案究竟难在哪里&#xff1f; 在当今数字化社会中&#xff0c;算法备案已成为人工智能技术应用中的一个关键环节。然而&#xff0c;对于初学者和企业来说&#xff0c;这一过程充满了挑战和复杂性。本文将深入探讨算法备案的难度和应对策略。 算法备案的挑战 首先&#xff…

标准库标头 <filesystem> (C++17)学习

此头文件是文件系统支持库的一部分。本篇介绍filesystem命名空间的一些函数。 函数 在命名空间 std::filesystem 定义 absolute (C17) 组成一个绝对路径 (函数) canonicalweakly_canonical (C17) 组成一个规范路径 (函数) relativeproximate (C17) 组成一个相对路径 (函数) c…

提高开发效率的实用工具库VueUse

VueUse中文网&#xff1a;https://vueuse.nodejs.cn/ 使用方法 安装依赖包 npm i vueuse/core单页面使用&#xff08;useThrottleFn举例&#xff09; import { useThrottleFn } from "vueuse/core"; // 表单提交 const handleSubmit useThrottleFn(() > {// 具…

Android中Fragment的最佳实践—简易版的新闻应用

文章目录 Android中Fragment的最佳实践—简易版的新闻应用app/build.gradle当中添加依赖库新建新闻实体类News新建布局文件news_content_frag.xml新建NewsContentFragment类单页模式需新建NewsContentActivity新建news_title_frag.xml新建news_item.xml新建NewsTitleFragment修…

el-date-picker年份选择默认值为当前年,并且将获取时间转为年月日格式

<el-date-pickervalue-format"yyyy"v-model"leftQuery.year":disabled"timeArr && timeArr.length ! 0 ? true : false"type"year"placeholder"选择年"changechangeYear:picker-options"pickerOptions&quo…

Python GUI入门详解-学习篇

一、简介 GUI就是图形用户界面的意思&#xff0c;在Python中使用PyQt可以快速搭建自己的应用&#xff0c;自己的程序看上去就会更加高大上。 有时候使用 python 做自动化运维操作&#xff0c;开发一个简单的应用程序非常方便。程序写好&#xff0c;每次都要通过命令行运行 pyt…

第4章-03-用WebDriver获取页面Cookie

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

IDEA提交git代码前执行checkstyle校验

为了统一团队人员代码风格&#xff0c;在代码协同时经常会引入对应的checkstyle校验功能&#xff0c;配置好代码style后一般在IDEA执行mvn validate功能即可&#xff0c;如下图所示&#xff1a; 但是有时忘记执行怎么办&#xff0c;IDEA在代码提交前也有对应的配置&#xff0c;…

【Java并发编程 | JUC】线程

Java 线程 项目配置 pom.xml <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency><dependency><groupId>ch.qos.…

orcle 数据库 day0903

ok奥家人们&#xff0c;今天继续学习orcle数据库 一. 数据完整性 向某张表插入数据、更新、删除数据之前会对数据做校验&#xff0c;目 的就是为了确保数据的正确性、一致性、最大限度 减少重复 的数据、避免脏数据&#xff0c;这就是数据完整性。以下的数据就是脏 数据&a…

表情,符号,数字,字母,加密和解密源码

表情&#xff0c;符号&#xff0c;数字&#xff0c;字母&#xff0c;加密和解密源码 可以将表情&#xff0c;动物&#xff0c;水果&#xff0c;表情&#xff0c;手势&#xff0c;猫语&#xff0c;兽语&#xff0c;狗语&#xff0c;爱语&#xff0c;符号&#xff0c;数字&#x…

Mac M1安装Hive

一、下载解压Hive 1.官网地址 https://dlcdn.apache.org/hive/ 2.选择对应版本进行下载&#xff0c;这里我以3.1.3为例&#xff1b; 3.下载好后&#xff0c;进行解压&#xff0c;并重命名为hive-3.1.3&#xff0c;放到资源库目录下&#xff1b; 二、配置系统环境 1.打开~/…

WebGL系列教程一(开篇)

目录 1 前言2 推荐的书籍和网站3 WebGL简介4 本教程包含的主要内容预览4.1 顶点着色器4.2 片元着色器4.3 绘制点线面4.4 绘制三角形和四边形4.5 缓冲区4.6 旋转、平移、缩放4.7 动画4.8 颜色和纹理4.9 GLSL语法4.10 模型变换、视图变换、投影变换4.11 光照4.12 层次模型4.13 鼠…

【MySQL】MySQL常用的数据类型——表的操作

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解关于MySQL常用数据类型&#xff0c;表的简单使用&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;http://t.csdnimg.cn/wwaqe &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondl…

传统CV算法——特征匹配算法

Brute-Force蛮力匹配 Brute-Force蛮力匹配是一种简单直接的模式识别方法&#xff0c;经常用于计算机视觉和数字图像处理领域中的特征匹配。该方法通过逐一比较目标图像中的所有特征点与源图像中的特征点来寻找最佳匹配。这种方法的主要步骤包括&#xff1a; 特征提取&#xff…

JAVA开源项目 图书个性化推荐系统 计算机毕业设计

本文项目编号 T 015 &#xff0c;文末自助获取源码 \color{red}{T015&#xff0c;文末自助获取源码} T015&#xff0c;文末自助获取源码 目录 一、系统介绍1.1 业务分析1.2 用例设计1.3 时序设计 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究…

jmeter之循环控制器使用

一、循环控制器介绍及使用 循环控制器作用&#xff1a; 通过设置循环次数&#xff0c;来实现循环发送请求 位置&#xff1a;测试计划------>线程组(右键添加)------>逻辑控制器------>循环控制器 如图&#xff1a; 参数介绍&#xff1a; 循环次数&#xff1a;5 …

C语言11--特殊函数

静态函数 背景知识&#xff1a;普通函数都是跨文件可见的&#xff0c;即在文件 a.c 中定义的函数可以在 b.c 中使用。静态函数&#xff1a;只能在定义的文件内可见的函数&#xff0c;称为静态函数。 因此静态函数一般会被写在头文件中方便任何需要调用的文件直接包含即可作用&…

JavaScript 循环分支语句-dowhile循环

do/while 循环是 while 循环的变体。该循环会在检查条件是否为真之前执行一次代码块&#xff0c;然后如果条件为真的话&#xff0c;就会重复这个循环。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta htt…

Ansys Zemax | 什么是Sobol取样?

附件下载 联系工作人员获取附件 本文主要介绍了&#xff1a; 什么是Sobol取样&#xff1f; 和随机光线产生方法相比&#xff0c;Sobol取样有什么优点&#xff1f; Sobol取样有什么限制&#xff1f; 随机取样和Sobol取样模式 一个光源会在位置空间以及角度空间随机产生光…