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;

};

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

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

csrf+xss组合拳

csrfxss组合拳 一、环境搭建 靶场cms文章管理系统 二、流程开始 这是系统前端 系统管理后台 而我们要打到后台管理员的cookie&#xff0c;结合前端存储型的xss完全可以实现&#xff0c;那后端怎么被打到cookie呢&#xff0c;我们来从这里添加用户开始分析数据包来说明 看看…

Python15 理解Python迭代器

1.Python中的迭代器 在Python中&#xff0c;迭代器是一种允许程序员遍历一个容器&#xff08;特别是列表、元组、字典等集合类型&#xff09;的对象&#xff0c;而不需要了解容器的内部结构。迭代器提供了一个统一的方法来逐一访问容器中的元素&#xff0c;这种机制称为迭代。…

苹果手机safari浏览器的userAgent显示为电脑的userAgent问题解决

目录 1.问题背景 2.userAgent 3.解决 1.问题背景 开发了一个H5&#xff0c;是通过生成二维码&#xff0c;扫描这个二维码后就跳到这个H5&#xff0c;所以需要判断一下扫描的设备是否为手机&#xff0c;然后由于业务逻辑还需要判断一下手机是Android、iOS还是iPad。一般前端…

文件操作<C语言>

导言 平时我们在写程序时&#xff0c;在运行时申请内存空间&#xff0c;运行完时内存空间被收回&#xff0c;如果想要持久化的保存&#xff0c;我们就可以使用文件&#xff0c;所以下文将要介绍一些在程序中完成一些文件操作。 目录 导言 文件流 文件指针 文件的打开与关闭 …

Python 深入学习局部函数和闭包函数

目录 局部函数与闭包函数的关联 变量捕获与状态保留 应用场景的交集与差异 闭包的本质 局部函数示例 闭包函数示例 局部函数和闭包函数之间存在着密切的联系&#xff0c;同时也有一些本质的区别。 局部函数与闭包函数的关联 局部函数&#xff08;Nested Function&#…

【机器学习 复习】第9章 降维算法——PCA降维

一、概念 1.PCA &#xff08;1&#xff09;主成分分析&#xff08;Principal ComponentAnalysis&#xff0c;PCA&#xff09;一种经典的线性降维分析算法。 &#xff08;2&#xff09;原理&#xff0c;这里以二维转一维为例&#xff0c;原来的平面变成了一条直线 这是三维变二…

Java | Leetcode Java题解之第179题最大数

题目&#xff1a; 题解&#xff1a; class Solution {public String largestNumber(int[] nums) {int n nums.length;// 转换成包装类型&#xff0c;以便传入 Comparator 对象&#xff08;此处为 lambda 表达式&#xff09;Integer[] numsArr new Integer[n];for (int i 0;…

Windows 11 安装hp 1020 plus 打印机驱动 (Ubuntu 20.04.3 LTS 部署cups局域网共享打印服务器)

1 win11 下载HP laserjet 1020 plus驱动,可以官网下载哦 链接下载 2 手动添加hp laserjet 1020驱动: 控制面板-->查看设备和打印机-->打印机和扫描仪-->添加设备-->我需要的打印机不在列表中-->通过手动添加-->按名称选择共享打印机 如果找不到&#xff0…

【ajax基础04】form-serialize插件

目录 一&#xff1a;form-serialize插件 作用&#xff1a; 语法格式&#xff1a; 一&#xff1a;form-serialize插件 作用&#xff1a; 快速且大量的收集表单元素的值 例如上图对于多表单元素的情形&#xff0c;单靠通过”选择器获取节点.value”值的形式&#xff0c;获取…

Excel做简单的趋势预测

这种方法不能代替机器学习&#xff0c;时序分析等&#xff0c;只是为后面的时序预测提供一个经验认识。 step1 选中序号列&#xff08;或时间列&#xff09;与预测列如图1所示&#xff1a; 图1 step2 工具栏点击“数据”&#xff0c;然后再“数据”下点击“预测模型”&#x…

apache activeMq

https://blog.csdn.net/qq_29651203/article/details/108487924 游览器输入地址: http://127.0.0.1:8161/admin/ 访问activemq管理台 账号和密码默认为: admin/admin# yml配置的密码也是如下的密码 activemq:url: failover:(tcp://localhost:61616)username: adminpassword: ad…

水果销售系统

摘 要 随着电子商务的快速发展&#xff0c;传统的实体销售模式面临着越来越多的挑战。在这个数字化的时代&#xff0c;消费者的购物习惯发生了翻天覆地的变化&#xff0c;消费者更倾向于在家中通过网络平台浏览并购买商品&#xff0c;这无疑给传统水果销售带来了极大的挑战。为…

高通安卓12-固件升级

下载步骤 第一步 格式化 「下载一次即可&#xff1b;能开机能下载的板子 忽略这一步&#xff0c;直接执行第二步即可」 QFIL工具配置为UFS类型&#xff0c;勾选Provision&#xff0c;如下图&#xff1a; Programmer选择prog_firehose_ddr.elf&#xff0c;Provision Xml选择prov…

前端 CSS 经典:mix-blend-mode 属性

前言&#xff1a;这是一个混合属性&#xff0c;作用是将两个颜色混合生成一个新颜色。可以将视频和文字相融合&#xff0c;产生动态文字效果。 效果 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" />&l…

pytest测试框架pytest-sugar插件生成进度条

Pytest提供了丰富的插件来扩展其功能&#xff0c;介绍下插件pytest-sugar&#xff0c;可以帮助我们在控制台中显示彩色的测试结果和进度条&#xff0c;提供失败的堆栈回溯信息。 为了使用 pytest-sugar&#xff0c;需要满足以下条件&#xff1a; Python 3.8 或更高版本pytest…

移远通信发布高性价比智能模组SC200P系列,赋能金融支付等行业智慧升级

近日&#xff0c;全球领先的物联网整体解决方案供应商移远通信宣布&#xff0c;为满足智慧金融、智能家居、智能穿戴、工业手持等消费和工业应用对高速率、多媒体、长生命周期等终端性能的需求&#xff0c;其正式推出基于紫光展锐UNISOC 7861平台的全新8核4G智能模组SC200P系列…

FPGA 690T 高速存储设计

高速存储设计会有各种需求的考虑&#xff0c;那么对应的方案也不完全相同&#xff0c;这篇文章出一期纯FPGA实现的高速存储方案。用纯fpga实现高速存储板卡有易国产化&#xff0c;功耗低和体积小等特点&#xff0c;缺点就是灵活性不是很强&#xff0c;实现标准ext4和nfs文件系统…

linux最大线程数限制及打开最大文件数

1.root用户下执行 ulimit -a 然后查看 max user processes 这个值通常是系统最大线程数的一半 max user processes&#xff1a;当前用户同时打开的进程(包括线程)的最大个数为 2.普通用户下 ulimit -a 出现的max user processes的值 默认是 /etc/security/limits.d/20-nproc.co…

jarvisoj_level2

首先检查checksec 可以看见no canary found 说明可能是栈溢出 运行一下程序 随便输一个,得到hello world(感觉这一步好像没啥用,没有RE那用) IDA 32 打开 后门 漏洞点 buf: 代码思路:利用溢出,把buf填满,然后构造程序,得到获取shell的目的 exp来自 BUUCTF—jarvisoj_level…

UE4引擎支持HTML5

文章目录 目的UE版本html5版本编译HTML5小结目的 本篇文章主要写下UE4如何编译支持HTML5,至于为什么是UE4而不是UE5,或者一些其他的话题,本篇不做讨论。 UE版本 先来看看UE的版本管理,如下图:有大概70个分支,有些还在维护,有些还在升级;tags有200多个,很可能还会增…