c++day7---9.14

 思维导图:

 

#include <iostream>
using namespace std;template<typename T>
class myVector
{
private:T* arr;size_t size;  //元素数量size_t max_size;   //数组容量
public://构造函数myVector() :arr(nullptr), size(0), max_size(0) {}myVector(int size){if (size > 0){this->max_size = size;this->arr = new T[max_size];this->size = 0;cout << "容量设置成功" << endl;}if (size < 0){throw double(1);}}myVector(const myVector& other) :size(other.size), max_size(other.max_size){if (this != &other){arr = new T[max_size];for (size_t i = 0; i < size; i++){arr[i] = other.arr[i];}}}//析构函数~myVector(){delete[] arr;}//获取当前元素的个数size_t getSize()const{return size;}//获取当前容量size_t getMax_size()const{return max_size;}//返回最后一个元素T back()const{return arr[size - 1];}//判空bool isEmpty(){return size == 0;}//尾插void push_back(const T& value){if (size >= max_size){//进行扩容size_t new_max_size = (max_size == 0) ? 1 : max_size * 2;T* newArr = new T[new_max_size];for (size_t i = 0; i < size; i++){newArr[i] = arr[i];}delete[] arr;arr = newArr;max_size = new_max_size;}arr[size++] = value;}//返回指定位置的元素T& operator[](size_t index){if (index >= size){throw double(3);}return arr[index];}//at函数T& at(size_t index)const{if (index < size){return arr[index];}else{throw double(4);}}//删除最后一个元素void pop_back(){if (!isEmpty()){--size;}}//删除任意元素void erase(size_t index){if (index >= size){throw double(5);}for (size_t i = index; i < size - 1; ++i){arr[i] = arr[i + 1];}--size;//可以减少数组的容量if (size < max_size / 4){size_t new_max_size = max_size / 2;T* newArr = new T[new_max_size];for (size_t i = 0; i < size; ++i){newArr[i] = arr[i];}delete[] arr;arr = newArr;max_size = new_max_size;}}//返回第一个元素T front()const{return arr[0];}//调整容器的大小void resize(size_t newSize){if (newSize < 0){throw double(7);}if (newSize == size){return;}if (newSize < size){size = newSize;}else{if (newSize > max_size){// 如果新大小大于容量,需要重新分配内存size_t new_max_size = (newSize >  max_size* 2) ? newSize : max_size * 2;T* newArr = new T[new_max_size];for (size_t i = 0; i < size; ++i){newArr[i] = arr[i];}delete[] arr;arr = newArr;max_size = new_max_size;}while (size < newSize){push_back(T());}}}};int main() {size_t size;cout<<"请设置容器的最大容量:";cin>>size;myVector<int> vec(size);// 添加元素for (int i = 1; i <= 10; ++i) {vec.push_back(i);}// 访问和打印元素cout << "当前容器中的元素为: ";for (size_t i = 0; i < vec.getSize(); ++i) {cout << vec[i] << " ";}cout << endl;cout<<"当前容器的容量为:"<<vec.getMax_size()<<endl;// 测试 front 和 back 函数cout << "第一个元素为: " << vec.front() << endl;cout << "最后一个元素为: " << vec.back() << endl;// 删除最后一个元素vec.pop_back();// 访问和打印元素cout << "删除最后一个元素后容器中的元素为: ";for (size_t i = 0; i < vec.getSize(); ++i) {cout << vec[i] << " ";}cout << endl;int num;cout<<"请输入你要删除第几个元素:";cin>>num;// 删除指定位置的元素vec.erase(--num); // 删除第三个元素// 访问和打印元素cout << "执行删除后容器中的元素为: ";for (size_t i = 0; i < vec.getSize(); ++i) {cout << vec[i] << " ";}cout << endl;// 调整容器大小int a;cout<<"请输入你要设置的容器大小:";cin>>a;vec.resize(a);// 访问和打印元素cout << "调整容器大小后容器中的元素为: ";for (size_t i = 0; i < vec.getSize(); ++i) {cout << vec[i] << " ";}cout << endl;cout<<"当前容器的容量为:"<<vec.getMax_size()<<endl;// 测试 at 函数cout << "at(2) = " << vec.at(2) << endl;// 测试越界访问//cout << vec[20] << endl; // 会抛出异常return 0;
}

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

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

相关文章

JenniAI:基于AI的文章生成器写作助手

【产品介绍】 • 名称 JenniAI • 成立/上线时间 2022年 • 具体描述 Jenni AI是一个基于AI的文章写作助手&#xff0c;通过使用先进的人工智能技术帮助用户更快、更好、更有创意地写作。无论用户需要写一篇论文、一篇博客、一封邮件、…

virtualbox虚拟机中安装FreeDOS系统和DJGPP编译环境

一、安装FreeDOS系统 1、从官网下载FreeDOS系统镜像&#xff0c;下载的压缩包中包含两个文件&#xff1a;后缀为.iso和.img的镜像 ​​​下载页面 http://www.freedos.org/download/ 直接下载链接 https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.…

软件架构设计(十三) 构件与中间件技术

中间件的定义 其实中间件是属于构件的一种。是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同技术之间共享资源。 我们把它定性为一类系统软件,比如我们常说的消息中间件,数据库中间件等等都是中间件的一种体现。一般情况都是给应用系统提供服务,而不是直接…

行业追踪,2023-09-14

自动复盘 2023-09-14 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

http实现文件分片下载

文章目录 检测是否支持HTTP Range 语法Range请求cURL示例单一范围多重范围条件式分片请求 Range分片请求的响应文件整体下载文件分片下载文本下载图片下载封装下载方法 HTTP分片异步下载是一种下载文件的技术&#xff0c;它允许将一个大文件分成多个小块&#xff08;分片&#…

C生万物之函数

前言&#xff1a; &#x1f4d5;作者简介&#xff1a;热爱编程的小七&#xff0c;致力于C、Java、Python等多编程语言&#xff0c;热爱编程和长板的运动少年&#xff01; &#x1f4d8;相关专栏Java基础语法&#xff0c;JavaEE初阶&#xff0c;数据库&#xff0c;数据结构和算法…

Redis Cluster集群运维与核心原理剖析

Redis集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异常&#xff0c;则会做主从切换&#xff0c;将某一台slave作为master&#xff0c;哨兵的配置略微复杂&#xff0c;并且性能和高可用性…

Sentinel控制台配置 持久化到nacos

sentinel控制台&#xff0c;使用方便&#xff0c;功能强大。使用官方的jar包&#xff0c;配置不会持久化&#xff0c;sentinel重启后会导致&#xff0c;之前的规则全部丢失&#xff0c;下面一起改造源码实现规则数据的持久化 sentinel源码地址 &#xff08;github访问太慢&am…

git-命令行显示当前目录分支

1. 打开家目录.bashrc隐藏文件&#xff0c;找到如下内容 forlinxubuntu:~$ vi ~/.bashrcif [ "$color_prompt" yes ]; thenPS1${debian_chroot:($debian_chroot)}\[\033[01;32m\]\u\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ elsePS1${debian_chroot:($debi…

LeetCode刷题笔记【31】:动态规划专题-3(整数拆分、不同的二叉搜索树)

文章目录 前置知识343. 整数拆分题目描述解题思路代码进一步优化 96.不同的二叉搜索树题目描述解题思路代码优化改进 总结 前置知识 参考前文 参考文章&#xff1a; LeetCode刷题笔记【29】&#xff1a;动态规划专题-1&#xff08;斐波那契数、爬楼梯、使用最小花费爬楼梯&…

算法笔记——循环链表

带环链表 算法题中&#xff0c;会有一种题目让我们去判断链表里的是否有循环。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 这里就需要我们要用快慢指针来进行搜索&#xff0c;直接提供代码 class Solution { public:bool hasCycle(ListNode *…

Qt开发 入门

1.Qt概述 什么是Qt 不论我们学习什么样的知识点首先第一步都需要搞明白它是什么&#xff0c;这样才能明确当前学习的方向是否正确&#xff0c;下面给大家介绍一下什么是Qt。 Qt是一个跨平台的C应用程序开发框架 具有短平快的优秀特质: 投资少、周期短、见效快、效益高几乎支持…

VM-Linux基础操作命令

目录 基础知识&#xff1a; Linux的组成 命令执行的本质&#xff1a; 通配符&#xff1a; 终端 1.命令提示符 1.2.命令格式 例一&#xff1a;查看内核 例二&#xff1a; 查看内核版本 例三&#xff1a;查看shell类型 例四&#xff1a;查看IP地址 2.cd命令 3.查看帮…

蓝牙核心规范(V5.4)12.3-深入详解之LE GATT安全级别特征

蓝牙篇之蓝牙核心规范&#xff08;V5.4&#xff09;深入详解汇总 1.知识回顾 蓝牙协议GATT&#xff08;Generic Attribute Profile&#xff09;是蓝牙设备间进行数据交换的标准协议之一。GATT是一种基于服务&#xff08;Service&#xff09;和特性&#xff08;Characteristic&…

摩尔纹是什么?如何消除摩尔纹?

相信很多小伙伴在渲染的时候会遇到各种各样的问题&#xff0c;比如摩尔纹&#xff0c;一张图片如果出现摩尔纹那基本就没法用了。那摩尔纹是什么呢&#xff1f;为什么会出现摩尔纹&#xff1f;又要如何消除摩尔纹呢&#xff1f;这篇文章我们就来探讨下。 一、摩尔纹是什么 官方…

记LGSVL Map Annotation(2)导入点云、以及地图

导入点云 内置的点云导入器工具提供了将最流行的点云文件格式&#xff08;PCD、PLY、LAS、LAZ&#xff09;转换为可用于仿真的数据所需的所有功能。 要访问点云导入器窗口&#xff0c;请在 Unity 编辑器中打开模拟器项目&#xff0c;然后导航到 Simulator/Import Point Cloud…

抓拍摄像机开关量控制4K高清手机远程看图建筑生长定时缩时相机

作为物联网数据采集解决方案专业提供商,数采物联网小编daq-iot 在这里做以下内容介绍,并诚挚的欢迎大家讨论和交流。 项目案例参考视频&#xff1a; https://www.bilibili.com/video/BV1Kp4y1T7wQ/?spm_id_from333.999.0.0 4K高清太阳能供电定时拍照相机&#xff0c;通过光…

c语言每日一练(15)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;上学期间将看学业情况更新。 五道选择题&#xff1a; 1、程序运行的结果…

【python绘图—colorbar操作学习】

文章目录 Colorbar的作用Colorbar的操作截取cmap拼接cmap双刻度列colorbar 引用 Colorbar的作用 Colorbar&#xff08;颜色条&#xff09;在绘图中的作用非常重要&#xff0c;它主要用于以下几个方面&#xff1a; 表示数据范围&#xff1a; Colorbar可以显示图中的颜色映射范围…

嵌入式Linux驱动开发(I2C专题)(五)

I2C系统驱动程序模型 参考资料&#xff1a; Linux内核文档: Documentation\i2c\instantiating-devices.rstDocumentation\i2c\writing-clients.rst Linux内核驱动程序示例: drivers/eeprom/at24.c 1. I2C驱动程序的层次 I2C Core就是I2C核心层&#xff0c;它的作用&#xf…