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;通过使用先进的人工智能技术帮助用户更快、更好、更有创意地写作。无论用户需要写一篇论文、一篇博客、一封邮件、…

mysql的分组group by

文章目录 一、介绍1、分组查询的内容2、多字段分组3、将查询内容连接group_concat4、有条件的分组查询having 一、介绍 将某个字段的相同值分为一组&#xff0c;分组查询的结果强调的是一个整体&#xff0c;每组内容只显示一行分组查询的内容一般要查询分组字段&#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.…

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

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

vue-自适应布局-postcss-pxtorem

原理&#xff1a; 比如一个375px设计稿 其中一个320px宽度的元素 如何实现自适应布局呢&#xff1f; 其实可以这样理解&#xff1a; 我们先计算出375屏幕时候320px的大小&#xff0c;在屏幕变化时候&#xff0c;这些元素都会等比例缩放 比如屏幕从375 变为750px时候&#xff0…

行业追踪,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;分片&#…

[重磅来袭] 功能强大的开源数据中台系统 DataCap 1.14.0 发布

推荐一套基于 SpringBoot 开发的简单、易用的开源权限管理平台&#xff0c;建议下载使用: https://github.com/devlive-community/authx 推荐一套为 Java 开发人员提供方便易用的 SDK 来与 OpenAI 的 API 进行交互组件&#xff1a;https://github.com/devlive-community/openai…

【黄色手套22】1话:基本数据类型

目录 前提补充&#xff1a; first : second&#xff1a; 基本数据类型: 整型: 字符型 &#xff1a; ASCII 码表 : 浮点型&#xff1a; 格式占位符 &#xff1a; 字符型数据的输入输出: 字符输入函数&#xff1a; getchar()&#xff1b;//单个字符 gets()&#xff1b;//…

prompt 视频收集

1.ChatGPT Prompt提示词工程 ***** 常用技巧 &#xff08;基本原则&#xff0c;格式&#xff0c;角色扮演&#xff09;_哔哩哔哩_bilibili

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…

Maintaining leader role through timed lease mechanism

Continuous understanding of distributed systems design On the one hand 基于定时的租约机制来保持leader角色 基于定时的租约机制来保持leader角色的设计思想是一种在分布式系统中确保高可用性和系统一致性的解决方法。 在分布式系统中&#xff0c;通常会有一个角色被选举…

Python 文件和正则表达式

文章目录 Python 文件和正则表达式文件打开文件读取文件直接读取 read()&#xff1a;逐行读取采用 **for** 循环&#xff1a;采用 readlines()&#xff1a; 正则表达式匹配规则re 模块match 方法&#xff1a;search 方法group 方法split 方法 Python 文件和正则表达式 文件 打…

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

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

召回和排序的样本构造问题

精排 正样本&#xff1a;曝光点击负样本&#xff1a;曝光未点击 粗排 正样本&#xff1a;曝光点击负样本&#xff1a;如果只复用精排的负样本&#xff0c;粗排模型对精排模型的拟合就会出现比较大的偏差。因为粗排打分高的item可能会被精排打低分&#xff0c;导致不能下发曝…

算法笔记——循环链表

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

openwrt上/etc/localtime报错问题解决

笔者在openwrt上使用docker 搭建为知笔记服务端的时候碰到了/etc/localtime报错问题&#xff0c;解决过程记录如下: docker构建命令如下 docker run --name wiz --restartalways -it -d \ -v /opt/wizdata:/wiz/storage \ -v /etc/localtime:/etc/localtime \ -p 8666:80 \ -p…