C++学习笔记——string类和new函数

目录

string类

1.功能增强

1.1 子字符串提取

1.2 字符串拼接

1.3 大小写转换

1.4 字符串比较

2.性能优化

3.使用示例

下面是一个简单的使用示例,展示了如何使用改进后的String类:

NEW函数

2.1NEW函数的基本用法

2.2NEW函数的注意事项

2.3避免悬空指针


string类

引言: 在C++编程中,字符串处理是一个常见且重要的任务。标准库提供了std::string类来处理字符串,但有时候我们需要更多的功能或者更高的性能。为此,我们可以自定义一个改进后的String类,通过添加额外的功能和优化性能来满足我们的需求。本文将介绍C++中改进后的String类,它具有更强大和更高效的字符串处理能力。

1.功能增强

在改进后的String类中,我们可以添加一些额外的功能,以便更方便地处理字符串。例如:

1.1 子字符串提取

我们可以添加一个函数来提取字符串中指定位置和长度的子字符串。

1.2 字符串拼接

我们可以实现字符串之间的拼接操作,方便将多个字符串合并成一个。

1.3 大小写转换

我们可以添加函数来实现字符串的大小写转换,例如将字符串全部转为大写或小写。

1.4 字符串比较

我们可以重载运算符来比较两个字符串是否相等,或者判断字符串的大小关系。

2.性能优化

除了功能增强外,我们还可以通过性能优化来提升String类的效率。

2.1 内存管理:我们可以改进内存的分配和释放策略,避免频繁的内存分配和释放操作,提高程序的性能。

2.2 字符串拷贝:我们可以优化字符串的拷贝操作,使用更高效的算法来提升性能。

2.3 字符串连接:当进行多个字符串的连接时,我们可以使用更有效的方式,避免频繁的内存分配和复制操作。

3.使用示例

下面是一个简单的使用示例,展示了如何使用改进后的String类:

  1. #include <iostream>
    #include "ImprovedString.h" // 改进后的String类的头文件int main() {ImprovedString str1("Hello");ImprovedString str2("World");// 字符串拼接ImprovedString result = str1 + " " + str2;std::cout << "拼接结果:" << result << std::endl;// 子字符串提取ImprovedString subStr = result.substr(0, 5);std::cout << "子字符串:" << subStr << std::endl;// 大小写转换ImprovedString upper = result.toUpper();ImprovedString lower = result.toLower();std::cout << "大写转换:" << upper << std::endl;std::cout << "小写转换:" << lower << std::endl;// 字符串比较if (str1 == str2) {std::cout << "str1与str2相等" << std::endl;} else if (str1 < str2) {std::cout << "str1小于str2" << std::endl;} else {std::cout << "str1大于str2" << std::endl;}return 0;
    }
    

在上述示例中,我们使用了改进后的String类来进行字符串的拼接、子字符串提取、大小写转换和字符串比较操作。通过使用这些功能,我们可以更方便地操作字符串,并且由于性能优化的存在,程序的运行效率也会得到提升。

NEW函数

在C++编程中,动态内存分配是一项重要的技术。它允许我们在程序运行时动态地分配和释放内存,而不需要提前知道需要多少内存。其中,NEW函数是C++提供的一个强大的工具,用于实现动态内存分配。本文将深入探讨NEW函数的使用方法、原理以及注意事项,帮助读者更好地理解和使用NEW函数。

2.1NEW函数的基本用法

在C++中,使用NEW函数可以动态地分配内存并返回指向该内存的指针。其基本用法如下:

int* ptr = new int;

上述代码中,NEW函数被用于分配一个整型变量的内存,并将返回的指针赋值给ptr。通过这样的方式,我们可以在程序运行时创建动态对象,而不需要提前知道对象的数量或大小。

EW函数的原理 NEW函数的原理涉及两个步骤:内存分配和对象构造。

  1.  内存分配 当调用NEW函数时,它首先会在堆内存中寻找足够大小的连续空闲内存块。如果找到了合适的内存块,就会将其标记为已占用,并返回指向该内存块的指针。如果没有足够的连续内存块,NEW函数会抛出std::bad_alloc异常。
  2. 对象构造 一旦获得了内存块,NEW函数会自动调用相应类型的构造函数来创建对象。例如,对于上述示例中的int类型,会调用int的默认构造函数来初始化该对象。

2.2NEW函数的注意事项

内存释放 使用NEW函数分配的内存必须显式释放,以避免内存泄漏。释放内存的方法是使用DELETE操作符,如下所示:

delete ptr;

数组分配 除了单个对象外,NEW函数还可以用于分配数组。数组的分配方式如下:

int* arr = new int[10];

在释放数组内存时,需要使用DELETE[]操作符,如下所示:

delete[] arr;

2.3避免悬空指针

当使用NEW函数分配内存后,要注意及时将指针赋值为nullptr或释放内存。否则,可能会导致悬空指针问题,造成内存泄漏或访问非法内存。

下面是一个简单的示例,展示了NEW函数的使用:

#include <iostream>class MyClass {
public:MyClass() {std::cout << "构造函数被调用" << std::endl;}~MyClass() {std::cout << "析构函数被调用" << std::endl;}
};int main() {MyClass* ptr = new MyClass;delete ptr;return 0;
}

在上述示例中,我们使用NEW函数动态地分配了一个MyClass对象的内存,并在程序结束前使用DELETE操作符释放了内存。通过观察输出结果,可以清楚地看到构造函数和析构函数的调用顺序。

结论: NEW函数是C++中强大且灵活的动态内存分配工具,它能够在程序运行时动态地分配和释放内存。通过合理使用NEW函数,我们可以更好地管理内存,避免内存泄漏和悬空指针问题。同时,我们也要注意在使用NEW函数后及时释放内存,以保证程序的正确性和性能。

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

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

相关文章

linux系统基础知识-基础IO

IO 概念引入位图的概念IO的系统调用函数openwriteread()close简单使用样例&#xff1a; 文件描述符fd默认文件流stdin/stdout/stderr文件描述符的分配规则 重定向的概念输出重定向输入重定向追加重定向dup2()系统调用总结 文件缓冲区深入理解缓冲区的概念输出缓冲区部分代码解释…

Linux网络配置与抓包工具介绍

目录 一、配置命令 1. ifconfig 1.1 概述信息解析 1.2 常用格式 2. ip 2.1 ip link 数据链路层 2.2 ip addr 网络层 2.3 路由 3. hostname 3.1 临时修改主机名 3.2 永久修改主机名 4. route 5. netstat 6. ss 7. ping 8. traceroute 9. nslookup 10. 永久修…

UI5与后端的文件交互(一)

文章目录 前言一、RAP的开发1. 创建表格2. 创建CDS Entity3. 创建BDEF4. 创建implementation class5. 创建Service Definition和Binding6. 测试API 二、创建UI5 Project1. 使用Basic模板创建2. 创建View3. 测试页面及绑定的oData数据是否正确4. 创建Controller5. 导入外部包&am…

计算机体系结构期末复习流程大纲

1.存储器和cache 存储器的容量、速度与价格之间的要求是相互矛盾的&#xff0c;速度越快&#xff0c;没bit位价格越高&#xff0c;容量越大&#xff0c;速度越慢&#xff0c;目前主存一般有DRAM构成。 处理器CPU访问存储器的指标&#xff1a; 延迟时间&#xff08;Latency&am…

【算法】算法设计与分析 期末复习总结

第一章 算法概述 时间复杂度比大小&#xff0c;用代入法&#xff0c;代入2即可。求渐进表达式&#xff0c;就是求极限&#xff0c;以极限为O的括号&#xff1b;O是指上界&#xff0c;Ω是指下界&#xff0c;θ是指上下界相等&#xff0c;在这里&#xff0c;可以这样理解&#…

Influxdb2修改管理员密码

通过恢复管理员令牌来重置InfluxDB2管理员的密码 1.找到数据库的配置文件 一般为config.json 2.配置文件的的blod文件配置 3.在这个混合文本和二进制json文件中搜索已知的用户名或token之类的字符串。 例如&#xff1a; "id":"0bd73badf2941000","…

WEB 3D技术 three.js 线框几何体

本文 我们说一下 线框几何体 想将一个几何体 以线框形式展现 threeJS中 有两种类可以实现 第一种 WireframeGeometry 这种几何体 其实就类似于 将材质中的 wireframe 开启 这种方法 之前我们也用过 还有一种 就是 EdgesGeometry 边缘几何体 我们先将代码写成这样 import .…

关于kthread_stop的疑问(linux3.16)

线程一旦启动起来后&#xff0c;会一直运行&#xff0c;除非该线程主动调用do_exit函数&#xff0c;或者其他的进程调用kthread_stop函数&#xff0c;结束线程的运行。 之前找销毁内核线程的接口时&#xff0c;发现了kthread_stop这个接口。网上说这个函数能够销毁一个内核线程…

Java中的IO流

在Java中&#xff0c;I/O&#xff08;输入/输出&#xff09;流用于处理与输入和输出相关的操作。Java的I/O流按照数据处理的不同方式分为两大类&#xff1a;字节流和字符流。每个类别又分为输入流和输出流。以下是Java中常用的I/O流及其继承关系&#xff1a; 字节流&#xff0…

批量剪辑方法:掌握视频剪辑技巧,按指定时长轻松分割视频

在视频制作和编辑过程中&#xff0c;经常要批量处理和剪辑大量的视频片段。学会批量剪辑方法可以提高工作效率&#xff0c;还可以使视频编辑更加准确和高效。下面来看下云炫AI智剪如何按指定时长轻松分割视频的批量剪辑方法。 分割后的视频文件效果&#xff0c;已分割分段的视…

业界首款PCIe 4.0/5.0多通道融合接口SSD技术解读

之前小编写过一篇文章劝大家不要碰PCIe 5.0 SSD&#xff0c;详细内容&#xff0c;可以再回顾下&#xff1a; 扩展阅读&#xff1a;当下最好不要入坑PCIe 5.0 SSD 如果想要进一步了解PCIe 6.0&#xff0c;欢迎点击阅读&#xff1a; 浅析PCIe 6.0功能更新与实现的挑战 PCIe 6.…

云卷云舒:【实战篇】云主机/虚拟机迁移

1. 简介 用户原有业务通过不同版本型号、不同操作系统的主机承载&#xff0c;形式上包括物理服务器、虚拟机、公有云主机等。随着业务不断扩张&#xff0c;需要将其业务云化转型&#xff0c;必须保证上云过程数据完整&#xff0c;业务平滑过度。 如果将所有业务系统都重新部署…

教你如何将本地虚拟机变成服务器,供其它电脑访问

场景&#xff1a;最近在做数据仓库的作业&#xff0c;需要团队协作&#xff0c;买不起阿里云服务器&#xff0c;所以想到能不能将我本地机上的虚拟机变成服务器&#xff0c;供其它同学的电脑访问。在虚拟机上安装hadoop和hive&#xff0c;然后同学机子上安装kettle进行连接。最…

Java 反射(一)

反射 1.反射的介绍 1.反射机制允话程序在执行期间借助于Refelction API取得任何类的信息&#xff08;比如成员变量&#xff0c;构造器&#xff0c;成员方法等&#xff09;并能操作对象的属性及方法&#xff0c;反射在设计模式和框架底层都会用到 2.加载完类之后&#xff0c;在…

可狱可囚的爬虫系列课程 08:新闻数据爬取实战

前言 本篇文章中我带大家针对前面所学 Requests 和 BeautifulSoup4 进行一个实操检验。 相信大家平时或多或少都有看新闻的习惯&#xff0c;那么我们今天所要爬取的网站便是新闻类型的&#xff1a;中国新闻网&#xff0c;我们先来使用爬虫爬取一些具有明显规则或规律的信息&am…

【Redis-04】Redis命令在客户端与服务器之间的执行流程

Redis本质上是一个数据结构服务器&#xff0c;支持键值对类型存储的内存管理系统&#xff0c;可以用作数据库、缓存和消息中间件&#xff0c;在我日常的开发中&#xff0c;基本上使用redis作为缓存中间件。 在Redis中有两个重要的角色&#xff0c;一个是服务器server&#xff0…

Adding Conditional Control to Text-to-Image Diffusion Models——【论文笔记】

本文发表于ICCV2023 论文地址&#xff1a;ICCV 2023 Open Access Repository (thecvf.com) 官方实现代码&#xff1a;lllyasviel/ControlNet: Let us control diffusion models! (github.com) Abstract 论文提出了一种神经网络架构ControlNet,可以将空间条件控制添加到大型…

性能分析与调优: Linux 监测工具的数据来源

目录 一、实验 1.环境 2. proc目录 3. sys目录 4.netlink 5.tracepoint 6.kprobes 7. uprobes 二、问题 1.systemd如何查看启动时间 2.CentOS与Ubuntu如何安装bpftrace 3.snap有哪些常用的命令 4.snap如何安装store 5.如何列出使用bpftrace的OpenJDK USDT探针 一…

显示管理磁盘分区 fdisk

显示管理磁盘分区 fdisk fdisk是用于检查一个磁盘上分区信息最通用的命令。 fdisk可以显示分区信息及一些细节信息&#xff0c;比如文件系统类型等。 设备的名称通常是/dev/sda、/dev/sdb 等。 对于以前的设备有可能还存在设备名为 /dev/hd* (IDE)的设备&#xff0c;这个设…

回顾2023编程之旅

一、前言 看在给了我一个博客专家的份上就继续写写博客&#xff0c;实事求是的讲如果是工作之余去总结csdn写写技术博客&#xff0c;还想混个专家什么的&#xff0c;真的是精力不够。因为里面的灌水的实在太多&#xff0c;比不过的&#xff0c;写这个玩意必须得淡泊名利才能悠然…