【C++】vector(下)--下篇

news2024/9/23 1:28:29

在这里插入图片描述
个人主页~

vector(上)~

vector(下)–上篇~


vector

  • 二、模拟实现
    • 3、test.cpp
      • test1
      • test2
      • test3
      • test4
      • test5
      • test6
  • 三、一个难题

二、模拟实现

3、test.cpp

test1

这个没啥好说的,就是尾插和迭代器都能正常使用

//测尾插和迭代器
void test1()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);

	for (size_t i = 0; i < v.size(); i++)
	{
		std::cout << v[i] << " ";
	}
	std::cout << std::endl;

	vector<int>::iterator it = v.begin();
	while (it != v.end())
	{
		*it *= 10;
		std::cout << *it << " ";
		++it;
	}
	std::cout << std::endl;

	for (auto e : v)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;
}

在这里插入图片描述

test2

这个测试有两部分,第一部分就是被注释掉的这一部分,第二部分就是剩下的部分

void test2()
{
	/*int i = 0;
	int j(1);
	int k = int(2);*/

	vector<int*> v1;
	v1.resize(5);

	vector<std::string> v2;
	//v2.resize(10, string("xxx"));//匿名对象
	v2.resize(10, "xxx");//隐式类型转换

	for (auto e : v1)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;

	for (auto e : v2)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;
}

在这里插入图片描述
关于第一部分,这段代码都是内置类型,它们也与类模板的初始化方式相同,这是因为T可以是任意的类型,当然也可以是int、double等内置类型,所以这里的构造遵从类模板

第二部分就是resize的测试,这里v1的类型是vector<int*>也就是相当于是指针数组

test3

测试insert

void test3()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);

	for (auto e : v)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;

	vector<int>::iterator it = v.begin() + 2;
	v.insert(it, 30);
	for (auto e : v)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;

	//v.insert(v.begin(), 30);//这是头插
	v.insert(v.begin() + 3, 30);
	for (auto e : v)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;
}

在这里插入图片描述
这里可以清楚地看到迭代器的加上一个数的效果以及insert效果的实现

test4

测试erase

void test4()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);

	for (auto e : v)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;

	auto pos = v.begin();
	v.erase(pos);

	for (auto e : v)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;

	v.erase(v.begin() + 3);
	for (auto e : v)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;
}

在这里插入图片描述
这也没啥好说的,就是erase的效果实现

test5

测试拷贝构造函数

void test5()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(1);
	v1.push_back(1);
	v1.push_back(1);
	v1.push_back(1);

	vector<int> v2(v1);

	for (auto e : v1)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;

	for (auto e : v2)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;

	vector<int> v3;
	v3.push_back(10);
	v3.push_back(20);
	v3.push_back(30);
	v3.push_back(40);

	v1 = v3;

	for (auto e : v1)
	{
		std::cout << e << " ";
	}
	std::cout << std::endl;
}

在这里插入图片描述

test6

reverse和resize

void test6()
{
	vector<int> v1;
	v1.reserve(10);
	v1.resize(20, 0);
	v1.resize(10, 1);
}

我们可以通过调试来观察这两个成员函数的行为

在这里插入图片描述
此时start和finish相同,endofstorage减去start换算为十进制就是40,也就刚好是10个int,满足reserve的功能,size没有动,只改变了capacity
在这里插入图片描述
此时resize改变了size以及capacity,finish与endofstorage相同,同时我们可以看到这里扩容后地址改变了,也就是说这些指针指向新空间了,同时start位置的值已经成为0,当然start到finish的所有值都是0
在这里插入图片描述
这里可以观察到,finish的位置在start10个int之后,endofstorage的位置在finish的10个int之后,因为操作之前的finish大于start+n(n为resize第一个参数),所以不改变之前的内容

三、一个难题

电话号码的字母组合

我们先把答案写出来然后慢慢梳理

class Solution {
    const char* numStrArr[10] = {"","","abc","def","ghi","mno","pqrs","tuv","wxyz"};
    //0~9每个数字所对应的字符串
public:
    void Combine(const string& digits,int i,string combineStr,vector<string>& ret)
    {
        if(i == digits.size())
        {
            ret.push_back(combineStr);
            return;
        }
        int num = digits[i] - '0';
        string str = numStrArr[num];
        for(auto ch: str)
        {
            Combine(digits,i+1,combineStr+ch,ret);
        }
    }
    vector<string> letterCombinations(string digits) {
        vector<string> v;
        if(digits.empty())
        {
            return v;
        }
        string str;
        Combine(digits,0,str,v);
        return v;
    }
};

这里画了一个简易的过程图
在这里插入图片描述
首先这个函数是一个结合函数,用来组合各个字符,当递归的次数与所键入的数字数相等时,就尾插最后一个字符后返回

num用来记录当前函数处理的是哪个数字,str用来保存当前这个数字所对应的字符串,然后将它们一个一个取出来进行结合

第零层取出2,组合出空字符串,第一层取出5,组合的字符串就是2对应的“a”、“b”、“c”,第二层取出8,组合的字符串为“aj”、“ak”、“al”、“bj”、“bk”、“bl”、“cj”、“ck”、“cl”,第三层时与所键入的数字数相等了,尾插tuv三个字符

题目解析起来很容易看懂,但是自己来做的话很难做,这里就是一个vector与string的结合题目,属于前序遍历类的题目


今日分享结束~

在这里插入图片描述

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

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

相关文章

中国各、省、市、县、乡镇基尼系数数据(2000-2023年)

基尼系数是一个国际上广泛用来综合考察居民内部收入分配差异状况的重要指标。它表示在全部居民收入中&#xff0c;用于进行不平均分配的那部分收入占总收入的百分比。基尼系数的值介于0和1之间&#xff0c;其中0代表收入分配绝对平均&#xff0c;即每个人的收入都相等&#xff…

Qt21基础图形的绘制

基础图形的绘制 paintareapaintarea.hpaintarea.cpp paintexpaintex.hpaintex.cpp main.cpp运行图 paintarea paintarea.h #ifndef PAINTAREA_H #define PAINTAREA_H#include <QWidget> #include <QBrush> #include <QPen> #include <QPainter> #inc…

DZ主题模板 Discuz迪恩淘宝客购物风格商业版模板

Discuz淘宝客网站模板&#xff0c;迪恩淘宝客购物风格商业版模板。 版本支持&#xff1a;discuzx3.0版本,discuzx3.1版本,discuzx3.2版本。 包括网站首页&#xff0c;论坛首页&#xff0c;论坛列表页&#xff0c;论坛内容页&#xff0c;论坛瀑布流,频道列表页&#xff0c;频道…

开学季好物合集有哪些?全方位必备好物推荐

随着秋风轻拂&#xff0c;书页翻新的声音在耳边悄然响起&#xff0c;我们迎来了又一个开学季。在这个特别的时刻&#xff0c;每位学子都怀揣着对未来的无限憧憬&#xff0c;踏入了校园的大门。为了帮助大家更好地适应新学期的学习节奏&#xff0c;享受更加充实而愉快的校园生活…

解决Linux安装epel源提示没有可用安装包

目录 前言 常规方法总结 1、命令直接安装 2、通过网址下载安装 手动安装 1、EPEL的资源地址 2、选择版本 3、找到rpm文件存放位置 4、下载并移动至虚拟机中 5、安装 6、成功后会生成相应的repo文件 7、更新源 前言 EPEL&#xff0c; 即Extra Packages for Enterpri…

STM32开发资料

文章目录 前言一、正点原子&#xff1f;1. 资料链接2.论坛3.参考资料盘 二、野火1. 论坛2. 资料链接 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 学习需要&#xff1a;找一个开发板的资料作为基础 提示&#xff1a;以下是本篇文章正文内容&…

Redis 键值对操作全攻略

文章目录 一 . get 和 set二 . keys *三 . exists四 . del五 . expire六 . ttl七 . Redis 的 key 的过期策略八 . 定时器的实现8.1 基于优先级队列8.2 基于时间轮实现的定时器 九 . type十 . 数据库管理相关命令 Hello , 大家好 , 这个专栏给大家带来的是 Redis 系列 ! 本篇文章…

聊聊客户端/服务器与订阅/发布两大模型

正文 大家好&#xff0c;我是bug菌&#xff5e; 在项目开发中根据不同的应用场景通常会去尝试各种各样的通信方式&#xff0c;可能试来试去可能又回到了原地&#xff0c;而对于一个相对比较大的网络系统&#xff0c;不同的场景得考量不同的通信架构模型&#xff0c;那么今天就跟…

面向对象23种设计模式通俗理解

终点即是起点,自强不息! 设计模式的理解 设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 模式&#xff1a;在某些场景下&#xff0c;针对某类问题的某种通用的解决方案。 场景&#xff1a;项目所在的环境 问题&#xff1a;约束条件&#xff0c;项目目标…

慷智serdes调试记录(AIM951-958)

项目使用的是AIM951~958 951和958测试图谱输出 下面是两种1920*1080不同屏幕timing的951图谱输出&#xff08;一般我们提供屏幕timing&#xff0c;然后找慷智FAE要下寄存器配置&#xff0c;他有一个xcel文档&#xff0c;可以自己设置屏幕timing然后得到寄存器设置值&#xff…

Vue 3 Composition API 中如何正确添加表单项副本到数组

在 Vue 3 中&#xff0c;使用 Composition API 时&#xff0c;如果你尝试直接通过引用&#xff08;如 formState&#xff09;来填充 formList 数组&#xff0c;你会遇到一个问题&#xff1a;所有通过 addForm 方法添加的表单项实际上都是对 formState 的同一个引用。这意呀着&a…

K3 给K+增加日志(获取机器名和IP地址)

K3有个外挂系统是K&#xff0c;可以对数据进行修改&#xff0c;但是没有日志功能&#xff0c;谁修改了什么、什么时候修改的不知道&#xff0c;借鉴t_log做一个日志 1、先建一个日志表 CREATE TABLE [dbo].[kplus_log]([FlogID] [int] IDENTITY(1,1) NOT NULL,[FDate] [datet…

CST软件如何计算天线fidelity保真度?达索代理思茂信息

天线保真度&#xff08;fidelity&#xff09;是指辐射信号和输入信号的相似程度&#xff0c;用最大归一化值表示[-1&#xff0c;1]。单独天线的保真度用端口激励信号和空间探针接收信号计算&#xff1b;双天线的保真度可用接收天线端口信号和发射天线的激励信号计算。所以在一定…

基于深度学习的谣言监测系统-毕业设计

介绍 本项目是一款基于深度学习的谣言监测系统&#xff0c;利用 LSTM 模型实现对网络谣言的自动识别和监测。在互联网和社交媒体高速发展的背景下&#xff0c;本项目的推出具有重要意义&#xff0c;旨在提高谣言识别的准确性和效率&#xff0c;帮助公众快速辨别真伪信息&#…

Java中类的成员介绍

我的后端学习大纲 我的Java学习大纲 4.类的成员&#xff1a; 3.1.类的成员 -> 属性介绍&#xff08;成员变量&#xff09;&#xff1a; a.语法格式&#xff1a; 1.修饰符 数据类型 属性名 初始化值 ;2.说明1: 修饰符 常用的权限修饰符有&#xff1a;private、缺省、prot…

自动驾驶TPM技术杂谈 ———— 多目标跟踪

文章目录 介绍目标外观模型目标形状模型目标特征描述颜色特征梯度信息纹理特征光流特征边缘特征多特征融合 目标运动估计约束型模型描述型模型 目标检测线上检测器线下检测器 数据关联 介绍 目标跟踪技术一直以来都是计算机视觉领域中的一个核心分支。多目标跟着那个又因其技术…

【Linux】进程(第九篇)

目录 1.进程概述 2.进程的内存布局 3.Linux和Windows空间对比 4.进程控制块&#xff08;PCB&#xff09; 5.进程的状态 6.进程的状态转换 7.进程源语 8.fork() 1.进程概述 进程是操作系统进行资源分配的最小单位&#xff0c;而内存是进程运行必不可少的资源。那么&…

鱼哥好书分享活动第30期:一本书看完教你学习如何做B端竞品分析?《有效竞品分享》

鱼哥好书分享活动第30期&#xff1a;一本书看完教你学习如何做B端竞品分析&#xff1f;《有效竞品分享》 01 明确目标&#xff1a;案例分享&#xff1a;案例背景&#xff1a; 02 选择竞品&#xff1a;2.1 竞品的分类2.2 如何找到B端的竞品&#xff1f;1.找售前/销售沟通。2.各个…

【自由能系列(中级),代码模拟】预测编码的核心:三个关键方程式的详解

预测编码的核心&#xff1a;三个关键方程式的详解 ——探索预测编码背后的数学原理与应用 核心结论&#xff1a;预测编码是一种基于贝叶斯定理的理论框架&#xff0c;它通过三个关键方程式描述了大脑如何处理和解释来自环境的信号。这些方程式分别建立了贝叶斯定理的简化形式、…

【机器学习】基扩展的基本概念以及其中的多项式回归、样条方法和广义可加模型的简单介绍(含python代码实例)

引言 基扩展是提升模型性能的重要工具&#xff0c;正确选择和应用基扩展方法可以显著提高模型的预测能力和解释性 文章目录 引言一、基扩展1.1 基扩展定义1.2 基扩展方法1.2.1 多项式基扩展1.2.2 样条基扩展1.2.3 径向基函数&#xff08;RBF&#xff09;1.2.4 傅里叶基扩展1.2.…