C++初阶学习第九弹-----vector的模拟实现

 C++初阶学习第六弹------标准库中的string类_c# string[]-CSDN博客

C++初阶学习第七弹——string的模拟实现-CSDN博客  

C++初阶学习第八弹--深入解析vector的使用-CSDN博客

一.vector的成员变量

目录

一.vector的成员变量

二.vector的模拟实现

2.1vector的构造与析构

2.2迭代器

2.3vector容器有关函数

2.3元素访问

 2.4 vector的增改操作


有图可以看出vector有三个成员变量,分别是_strat,_finish,_enf_of_storage。 

#include<iostream>
using namespace std;
//命名一个命名空间,在这个命名空间中实现我们自己的vector,这样能避免受库中vector的影响
namespace BIT
{template<class T>class vector{public:// Vector的迭代器是一个原生指针typedef T* iterator;typedef const T* const_iterator;privated:iterator _start;      //指向有效数据的头iterator _finish;     //指向有效数据的尾iterator _endOfStorage;    //指向容量的尾};
}

二.vector的模拟实现

2.1vector的构造与析构

	//1、默认构造vector():_start(nullptr),__finish(nullptr),_endOfStorage(nullptr){}//析构~vector(){if (_start){delete _start;_start = _finish = _endOfStorage = nullptr;}}

2.2迭代器

iterator begin(){return _start;}iterator end(){return _finish;}const_iterator begin() const{return _start;}const_iterator end() const{return _finish;}

2.3vector容器有关函数

	size_t size() const{return _finish - _start;}size_t capacity() const{return _end_of_storage - _start;}bool empty(){return _start == _finish;}void push_back(const T& x){// 扩容if (_finish == _end_of_storage){reserve(capacity() == 0 ? 4 : capacity() * 2);}*_finish = x;++_finish;}void pop_back(){assert(!empty());_finish--;}//   扩容void reserve(size_t n){if (n > capacity()){size_t old_size = size();T* tmp = new T[n];memcpy(tmp, _start, size() * sizeof(T));delete[] _start;_start = tmp;_finish = tmp + old_size;_end_of_storage = tmp + n;}}void resize(size_t n, const T& value = T())
{// 1.如果n小于当前的size,则数据个数缩小到nif (n <= size()){_finish = _start + n;return;}// 2.空间不够则增容if (n > capacity())reserve(n);// 3.将size扩大到niterator it = _finish;_finish = _start + n;while (it != _finish){*it = value;++it;}
}

2.3元素访问

// 元素访问
T& operator[](size_t pos)
{assert(pos < size());return _start[pos];
}const T& operator[](size_t pos)const
{assert(pos < size());return _start[pos];
}T& front()
{return *_start;
}const T& front()const
{return *_start;
}T& back()
{return *(_finish - 1);
}const T& back()const
{return *(_finish - 1);
}

 2.4 vector的增改操作

// vector的修改操作iterator insert(iterator pos, const T& x)
{assert(pos <= _finish);// 空间不够先进行增容if (_finish == _endOfStorage){//size_t size = size();size_t newCapacity = (0 == capacity()) ? 1 : capacity() * 2;reserve(newCapacity);// 如果发生了增容,需要重置pospos = _start + size();}iterator end = _finish - 1;while (end >= pos){*(end + 1) = *end;--end;}*pos = x;++_finish;return pos;
}// 返回删除数据的下一个数据
// 方便解决:一边遍历一边删除的迭代器失效问题
// (迭代器失效问题在vector中会发生,不知道的可以看我之前文章)
iterator erase(iterator pos)
{// 挪动数据进行删除iterator begin = pos + 1;while (begin != _finish) {*(begin - 1) = *begin;++begin;}--_finish;return pos;
}

好了到这里vector的模拟实现差不多就实现完了,请大佬们多多支持。

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

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

相关文章

提升网站流量的搜索引擎优化实用指南

内容概要 搜索引擎优化&#xff08;SEO&#xff09;是提升网站可见性与流量的重要过程。在当今数字时代&#xff0c;理解这一领域的基本概念至关重要。SEO不仅仅是关于提高关键词排名&#xff0c;更是关于如何创造更好的用户体验和吸引目标受众。以下是一些关键要素&#xff0…

求教0基础入门大模型的学习路线?java出身,数学良好,希望入局大模型算法,有无必要从cnn学起?

目录 前言&#xff1a; Prompt工程&#xff1a; 2.AI编程 3.API调用 4.大模型应用开发 1)RAG 2)Agent 5.深水区&#xff1a;模型训练和微调 1)Fine-tuning 2)多模态 6.产品和交付 前言 本人本科学历java开发出身&#xff0c;数学基础良好&#xff0c;希望入局大模…

ubuntu 安装 mongodb 笔记记录

https://www.mongodb.com/try/download/community 以上是下载地址 查看系统 (base) duyichengduyicheng-computer:~$ cat /proc/version Linux version 6.8.0-48-generic (builddlcy02-amd64-010) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU …

隐藏式水印了解一下?你以为加水印很麻烦?

隐藏式水印了解一下&#xff1f;你以为加水印很麻烦&#xff1f; 想在网页上添加水印&#xff1f;想要隐形又清晰的水印效果&#xff1f;watermark-js-plus或许就是你正在找的工具&#xff01;本文将详细介绍这款前端水印库的特点和使用方法&#xff0c;帮你轻松搞定网页水印问…

大模型人工智能课程全栈完整学习路径

嘿&#xff0c;朋友们&#xff0c;今天我们聊点高级的——大模型人工智能课程的全栈学习路径。不过别慌&#xff0c;虽然听起来高大上&#xff0c;但咱们慢慢来。从零开始&#xff0c;一步步带你走进这个神奇的世界。喝杯咖啡&#xff0c;穿上最舒适的拖鞋&#xff0c;准备好踏…

学SQL,要安装什么软件?

先上结论&#xff0c;推荐MySQLDbeaver的组合。 学SQL需要安装软件吗&#xff1f; 记得几年前我学习SQL的时候&#xff0c;以为像Java、Python一样需要安装SQL软件包&#xff0c;后来知道并没有所谓SQL软件&#xff0c;因为SQL是一种查询语言&#xff0c;它用来对数据库进行操…

六、鸿蒙开发-导航组件、定时器组件、动画

提示&#xff1a;本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程课整理 链接指引 > 尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程 文章目录 一、定时器1.1 参数1.2 事件 二、导航组件2.1 概述2.2 导航栏样式2.2.1 导航栏位置2.2.2…

【含文档】基于ssm+jsp的流浪动物收养系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…

TTL器件和CMOS器件的逻辑电平

一、逻辑电平的一些概念 要了解逻辑电平的内容&#xff0c;首先要知道以下几个概念的含义&#xff1a; 1&#xff1a;输入高电平&#xff08;VIH&#xff09;&#xff1a; 保证逻辑门的输入为高电平时所允许的最小输入高电平&#xff0c;当输入电平高于VIH时&#xff0c;则认…

10. java基础知识(下)

文章目录 一、一带而过二、字符串类型String1. 简单了解2. 关于结束符\03. 自动类型转换与强制类型转换 三、API文档与import导包1. API文档2. import导包 四、java中的数组1. 创建2. 遍历3. 补充4. Arrays类① 简单介绍② 练习 五、方法的重载六、规范约束七、内容出处 一、一…

Ubuntu下的截图工具Flameshot

安装Flameshot截图工具 sudo apt install flameshot配置快捷键Alt A 进入系统设置settings&#xff0c;找到Keyboard下的Keyboard Shortcuts 快捷键设置面板&#xff0c;如下图 添加一个快捷Alt A Add Custom Shortcut设置如上内容 Name设置为&#xff1a; Flameshot Sc…

(60)使用LMS算法和NLMS(归一化LMS)算法进行降噪

文章目录 前言一、关于自适应降噪仿真的几点说明1.降噪2. 参考信号与噪声信号3. LMS算法的步长4.自适应降噪原理5.维纳滤波器系数 二、LMS与NLMS自适应降噪的仿真三、仿真结果 前言 本文介绍了LMS自适应滤波器和NLMS自适应滤波器在降噪方面的应用&#xff0c;阐明期望信号、参…

如何从Python函数中返回列表

在 Python 中&#xff0c;可以轻松地从函数中返回一个列表。可以将列表直接作为返回值&#xff0c;通过 return 语句将其返回。 1、问题背景 在编写一个游戏时&#xff0c;需要创建一个函数来返回一个列表变量&#xff0c;以便将其传递给另一个变量。但是&#xff0c;在运行程…

深 度 学 习

神经网络基础 一、逻辑回归( Logic Regression ) 1 问题的模型 模型&#xff1a; 其中xx为输入量&#xff0c;y^y^​预测量&#xff0c;σ()σ()激活函数。   逻辑回归主要用于二分类问题的拟合&#xff1a;0≤y^P(y1∣x)≤10≤y^​P(y1∣x)≤1&#xff0c;σ(z)σ(z)如图…

GEE 数据集——美国gNATSGO(网格化国家土壤调查地理数据库)完整覆盖了美国所有地区和岛屿领土的最佳可用土壤信息

目录 简介 代码 引用 网址推荐 知识星球 机器学习 gNATSGO&#xff08;网格化国家土壤调查地理数据库&#xff09; 简介 gNATSGO&#xff08;网格化国家土壤调查地理数据库&#xff09;数据库是一个综合数据库&#xff0c;完整覆盖了美国所有地区和岛屿领土的最佳可用土…

(金蝶云星空)客户端追踪SQL

快捷键 ShitfCtryAltM 点击开始、最后操作功能、然后查看报告 SQL报告

小菜家教平台(三):基于SpringBoot+Vue打造一站式学习管理系统

目录 前言 今日进度 详细过程 相关知识点 前言 昨天重构了数据库并实现了登录功能&#xff0c;今天继续进行开发&#xff0c;创作不易&#xff0c;请多多支持~ 今日进度 添加过滤器、实现登出功能、实现用户授权功能校验 详细过程 一、添加过滤器 自定义过滤器作用&…

【数据处理】数据预处理·数据变换(熵与决策树)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必备知识_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

【电子通识】TINA-TI 如何产生动态电流波形?

在仿真过程中我们有些时候需要动态电流负载。比如说从5A跳到1A。那这种情况下我们怎么仿真呢&#xff1f; 首先打开TINA-TI软件&#xff0c;找到Sources源&#xff0c;放置一个可控电流源。 放置好后双击器件打开属性&#xff0c;点到Signal信号框中的三个小点。 找到piecewise…

【Qt聊天室客户端】登录窗口

1. 验证码 具体实现 登录界面中创建验证码图片空间&#xff0c;并添加到布局管理器中 主要功能概述&#xff08;创建一个verifycodewidget类专门实现验证码操作&#xff09; 详细代码 // 头文件#ifndef VERIFYCODEWIDGET_H #define VERIFYCODEWIDGET_H#include <QWidget>…