C++系列-String(一)

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

 string是用于字符串,可以增删改查

首先,我们来看一下string的底层

接下来,我们来看一下string的常用接口有哪些:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<list>
#include<algorithm>
using namespace std;void test_string1()
{//常用string s1;string s2("hello world");string s3(s2);cout << s3;
}
int main()
{test_string1();return 0;
}

 

我们可以看到的是,string起到了拷贝字符串的作用。

接下来是一些不常用的接口功能:

	string s4(s3, 3, 5);cout << s4 << endl;

 

我们可以看到这个接口的功能是从下标为3开始,向后拷贝五个字节

	string s5(s2, 3);cout << s5 << endl;

 

我们可以看到,这个接口的目的是从下标为3开始,一直拷贝到结尾

	string s6(s2, 3, 30);string s7("hello world", 5);string s8(10, 'x');cout << s6 << endl;cout << s7 << endl;cout << s8 << endl;

在接下来的接口6,7,8,这三个接口当中,想要实现的功能分别为

 

接口6是下标为3开始到30,由于30大于最大长度,所以到字符串的结尾

接口7是拷贝前5个

接口8是拷贝10个x

接下来,让我们看一下下面的这段代码:

void test_string2()
{//隐式类型转换string s2 = "hello world";string& s3 = "hello world";
}

在这段代码中,涉及到的知识点为隐式类型转换,我们都知道,临时变量具有常性,所以这段代码会出现报错,报错原因是由于权限的放大。

所以,我们需要再前面加上一个const

void test_string2()
{//隐式类型转换string s2 = "hello world";const string& s3 = "hello world";
}

这样子,我们就避免了权限放大的这个问题。

void push_back(const string &s)
{}void test_string2()
{//隐式类型转换string s2 = "hello world";const string& s3 = "hello world";//构造string s1("hello world");push_back(s1);push_back("hello world");
}

在这段代码中我们可以看到,当传参的时候,我们既可以传临时变量,也可以传字符串

接下来让我们简单实现一下string中的operator[]的粗略逻辑:

class string
{
public://引用返回//1.减少拷贝//2.修改返回对象char& operator[](size_t i){assert(i < _size);return _str[i];}
private:char* _str;size_t _size;size_t _capacity;};

这个告诉我们一件什么事情呢?那就是在[]中是存在暴力检查的。

 

 

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

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

相关文章

【机器学习】音乐大模型的深入探讨——当机器有了创意,是机遇还是灾难?

&#x1f440;国内外音乐大模型基本情况&#x1f440; ♥概述♥ ✈✈✈如FreeCompose、一术科技等&#xff0c;这些企业专注于开发人工智能驱动的语音、音效和音乐生成工具&#xff0c;致力于利用核心技术驱动文化产业升级。虽然具体公司未明确提及&#xff0c;但可以预见的是…

拓扑排序——C语言

拓扑排序&#xff08;Topological Sorting&#xff09;是一种用于有向无环图&#xff08;DAG&#xff09;的排序算法&#xff0c;其输出是图中所有顶点的线性排序&#xff0c;使得对于每条有向边 (u, v)&#xff0c;顶点 u 在 v 之前出现。拓扑排序确定了项目网络图中的起始事件…

大电流一体成型电感CSEB1350系列,助力实现DC-DC转换器小尺寸、高效率

DC-DC转换器 , 转换器 , 科达嘉 DC-DC转换器作为一种电压转换装置&#xff0c;在电子产品、电源系统、工业控制、新能源等领域广泛应用。。。 DC-DC转换器作为一种电压转换装置&#xff0c;在电子产品、电源系统、工业控制、新能源等领域广泛应用。随着各行业用户对DC-DC转换器…

Appium + Python App自动化第一个脚本

今天跟大家讲解一个Appium和Python App自动化的脚本。 【1】打开你的夜神模拟器&#xff08;或者连接你的手机&#xff09; 【2】打开桌面的Appium 【3】下载你要测的App的apk文件&#xff0c;放到桌面 【4】拖动你的apk安装包到夜神模拟器里&#xff0c;然后模拟器会提示你…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-36图像增广

6 图片增广 import matplotlib.pyplot as plt import numpy as np import torch import torchvision from d2l import torch as d2l from torch import nn from PIL import Image import liliPytorch as lp from torch.utils.data import Dataset, DataLoaderplt.figure(cat)…

B站大模型指令微调入门实战(完整代码),一键打造你的数字分身

前两天&#xff0c;想导出微信聊天记录&#xff0c;于是搞了个小工具。 感兴趣的小伙伴&#xff0c;可以回看&#xff1a; 微信聊天记录导出为电脑文件实操教程&#xff08;附代码&#xff09; 一键获取所有微信聊天记录&#xff08;附PyQT6入门实战&#xff09; 拿到这些数…

Python中使用PyQT5库时报错:没有Qt平台插件可以初始化

一、发现问题&#xff1a;无限易pythonGo打开执行的时候报&#xff1a;“没有Qt平台插件可以初始化&#xff0c;请重新安装应用程序。”的错误&#xff0c;点击确定后无限易崩溃闪退。 二、解决问题&#xff1a; 1、重新安装依赖&#xff0c;打开CMD输入pip list&#xff0c;查…

Leetcode3185. 构成整天的下标对数目 II

Every day a Leetcode 题目来源&#xff1a;3185. 构成整天的下标对数目 II 解法1&#xff1a;哈希 本质思路类同经典的“两数之和”。枚举右&#xff0c;用哈希表维护左。 枚举 j&#xff0c;并维护 cnt[x] 表示所有满足 i < j 的下标 i 中&#xff0c;有几个 hours[i]…

初识 SpringMVC,运行配置第一个Spring MVC 程序

1. 初识 SpringMVC&#xff0c;运行配置第一个Spring MVC 程序 文章目录 1. 初识 SpringMVC&#xff0c;运行配置第一个Spring MVC 程序1.1 什么是 MVC 2. Spring MVC 概述2.1 Spring MVC 的作用&#xff1a; 3. 运行配置第一个 Spring MVC 程序3.1 第一步&#xff1a;创建Mave…

基于CDMA的多用户水下无线光通信(1)——背景介绍

研究生期间做多用户水下无线光通信&#xff08;Underwater Optical Wireless Communication&#xff0c;UOWC&#xff09;&#xff0c;写几篇博客分享一下学的内容。导师给了大方向&#xff0c;让我用直接序列码分多址&#xff08;Direct Sequence Code Division Multiple Acce…

塞贝壳效应

塞贝克效应&#xff08;Seebeck effect&#xff09;&#xff0c;通常被称为第一热电效应&#xff0c;是由托马斯约翰塞贝克&#xff08;Thomas Johann Seebeck&#xff09;在1821年发现的一种热电现象。这个效应描述了当两种不同的导体或半导体在它们的接点处有温度差时&#x…

containerd手动配置容器网络

containerd手动配置容器网络 机器详情nerdctl启动一个不带网络的容器获取容器ID、PID与network namespace路径准备bridge插件的执行配置文件通过下面的命令调用bridge插件准备tuning插件文件执行下面的命令调用tuning插件准备portmap插件文件执行下面的命令调用portmap插件删除…

SFF1006A-ASEMI无人机专用SFF1006A

编辑&#xff1a;ll SFF1006A-ASEMI无人机专用SFF1006A 型号&#xff1a;SFF1006A 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;10A 最大循环峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;600V 最大…

富文本编辑器CKEditor

介绍 富文本编辑器不同于文本编辑器,它提供类似于 Microsoft Word 的编辑功能 在Django中,有可以现成的富文本三方模块django-ckeditor,具体安排方式: pip install django-ckeditor==6.5.1官网:Django CKEditor — Django CKEditor 6.7.0 documentation 使用方式 创建项…

VBA学习(17):使用条件格式制作Excel聚光灯

今天给大家分享的表格小技巧是制作聚光灯。 先说一下啥是聚光灯。所谓聚光灯&#xff0c;可以简单理解为对工作表的行列填充颜色&#xff0c;突出显示被选中的单元格&#xff0c;仿佛该单元格被聚光灯照亮似的。聚光灯有助于肉眼识别所选中的单元格或区域&#xff0c;提高数据…

【启明智显产品介绍】工业级HMI芯片Model3C详解(二)图像显示

Model3C芯片国产自主的工业级高清显示与智能控制 MCU&#xff0c;配备强大的 2D 图形加速处理器、PNG/JPEG 解码引擎&#xff0c;可以满足多种交互设计场景和多媒体互动需求&#xff0c;具备高可靠性、高开放性&#xff0c;可广泛应用于工业自动化控制、HMI人机交互、串口屏、智…

拖拽劫持与数据窃取

2010 年&#xff0c;ClickJacking 技术有了新的发展。一位名叫 Paul Stone 的安全研究者在 BlackHat 2010 大会上发表了题为“Next Generation Clickjacking”的演讲。在该演讲中&#xff0c;提出了“浏览器 拖拽事件”导致的一些安全问题。 目前很多浏览器都开始支持 Drag &a…

【database2】redis:优化/备份/订阅

文章目录 1.redis安装&#xff1a;加载.conf2.操作&#xff1a;set/get&#xff0c;push/pop&#xff0c;add/rem3.Jedis&#xff1a;java程序连接redis&#xff0c;拿到jedis4.案例_好友列表&#xff1a;json om.4.1 前端&#xff1a;index.html4.2 web&#xff1a;FriendSer…

谈谈面试常考题:懒加载,防抖,节流(方法实现详解)

前言 最近在学习中确实收获了挺多东西&#xff0c;其中我觉得有必要拿来进行分享一下的就是懒加载了&#xff0c;还有相关的防抖和节流。因为在浏览器中这些都是属于很常见的性能优化&#xff0c;面试也是常考题。话不多说&#xff0c;速度发车。 什么是懒加载&#xff1f;懒…

热题系列章节6

297. 二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。 请设计一个算法来实现…