C++手写可扩展数组模板类

news2024/11/17 21:54:18

前言

仅做学习理解和参考!

// dome.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <functional>
using namespace std;
#include <vector>
const int ARRAY_SIZE = 3; //数组默认长度3
template<class T> //类模板,泛型。
class Array 
{
public:
	T* arr; //定义一个数组指针
	int t_size; //当前数组大小
	int p_size; //数组的总大小
public:
	Array(int p_size = ARRAY_SIZE):p_size(p_size), t_size(0) //初始化列表
	{
		this->arr = new T[p_size]; //申请p_size大小数组的内存。
	}
	~Array()
	{
		if (this->arr == 0) return; 
		delete[] this->arr; //释放内存
		this->arr = NULL;
	}

	void add(T num) 
	{
		if (this->t_size >= this->p_size) 
		{
			cout << "超出数组长度!" << endl;
			int temp_size = this->p_size + ARRAY_SIZE;
			T*temp_arr = new T[temp_size];// 创建新的长度数组指针
			for (size_t i = 0; i < this->p_size; i++){temp_arr[i] = this->arr[i];}//数据拷贝
			delete[] arr;// 释放原数组内存
			this->arr = temp_arr;
			this->p_size = temp_size;
		}
		this->arr[this->t_size] = num;
		this->t_size++;

	}
	void getArr()// 输出数组内容
	{
		for (size_t i = 0; i < this->t_size; i++)
		{
			cout << this->arr[i] << endl;
		}
	}
	
	operator T* ()// 重载函数返回数组
	{
		return this->arr;
	}

	T& operator [](int num)// 重载函数可a[1],返回内容
	{
		return this->arr[num];
	}

	void operator +(T num) // 重载函数,功能与add()方法一致,可a+1表达式实现add方法
	{
		if (this->t_size >= this->p_size)
		{
			cout << "超出数组长度!" << endl;
			int temp_size = this->p_size + ARRAY_SIZE;
			T* temp_arr = new T[temp_size];// 创建新的长度数组指针
			for (size_t i = 0; i < this->p_size; i++) { temp_arr[i] = this->arr[i]; }//数据拷贝
			delete[] arr;// 释放原数组内存
			this->arr = temp_arr;
			this->p_size = temp_size;
		}
		this->arr[this->t_size] = num;
		this->t_size++;
	}
	
};
int main()
{

	Array<string> a;
	a.add("223"); a + "haha"; a + "333"; a + "333";
	a.getArr();
	cout << "-------------" << endl;
	a[1] = "888";
	cout << a[1] << endl;
	return 0;
}

结果

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

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

相关文章

Vue项目引入百度统计的正确操作步骤,亲测有效!

1、平台获取统计代码 2、在head和body中分别添加以下代码 head: <script>var _hmt _hmt || [];</script>body: <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js…

NET-MongoDB的安装使用

一&#xff0e;下载 MongoDB 点击 Select package 选择自己所需版本后点击下载&#xff0c;本文选用Windows 6.0版本以上 二、配置MongoDB 在 Windows 上&#xff0c;MongoDB 将默认安装在 C:\Program Files\MongoDB 中。 将 C:\Program Files\MongoDB\Server\version_numbe…

汇编语言王爽第四版17.3完程可运行可调试

汇编语言王爽第四版17.3节完整程序&#xff0c;可调试&#xff0c;可运行。 最基本的字符串输入程序&#xff0c;具备以下功能&#xff1a; 1、在输入的同时需要显示这个字符串&#xff1b; 2、输入回车符后&#xff0c;一个字符串的输入结束&#xff1b; 3、能够删除已经输入…

增速4755%!撬动海外美妆市场,赛盈分销洞察美国市场年终布局方向!

2020年国货美妆扎堆出海&#xff0c;行业增速23%&#xff0c;市场增长翻了10倍&#xff0c;也是从这一年开始&#xff0c;国货美妆真正进入了“大航海时代”。 从埃森哲的数据报告里看到&#xff0c;今年全球美妆市场整体规模已超6000亿美元&#xff0c;若按照每年10%的增幅增长…

2023-10-21 美团2024秋招后端开发岗笔试题

1 考察dfs和拓扑排序 1.1 题目描述&#xff08;如果拓扑排序不清楚可以去做一下lc 207. 课程表&#xff09; 1.2 答案 import java.util.*;public class Meituan {static int m,n;public static void main(String[] args) {Scanner in new Scanner(System.in);m in.nextInt…

微服务治理之道:构建可伸缩和高可用的系统

文章目录 什么是微服务治理&#xff1f;1. 服务发现和注册2. 负载均衡3. 容错处理4. 安全5. 日志和监控6. 版本管理 构建可伸缩的微服务系统1. 水平扩展2. 使用负载均衡3. 自动化扩展4. 异步通信5. 缓存 构建高可用的微服务系统1. 容错设计2. 多区域部署3. 自动故障转移4. 数据…

环境变量的秘密武器:让您的命令行效率倍增(环境变量图文详解)

Linux中的环境变量&#xff08;图文详解&#xff09; 1. 基本概念2. 常见环境变量PATH : 指定命令的搜索路径HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)SHELL : 当前Shell,它的值通常是/bin/bash 3. 查看环境变量方法4. 测试PATH5. HOME6. 和环境变量…

众和策略可靠吗?股票有杠杆吗?

可靠 在投资股票时&#xff0c;人们常常听到“杠杆”这个概念。可是&#xff0c;股票有杠杆吗&#xff1f;这个问题并不完全是是非两色的&#xff0c;需求从多个视点来看待。 从理论上讲&#xff0c;股票不是一个有杠杆的财物类别。杠杆是一种金融东西&#xff0c;能够使投资…

【解决AWS上死机问题】

状况&#xff1a;每天手动重启AWS的机器&#xff0c;如果不重启&#xff0c; 网站打不开。 发现死机原因为内存用完了&#xff0c; 这也是我后面安装软件时才发现的 检查内存 free 检查谁用了内存 ps aux|head -1;ps aux|grep -v PID|sort -rn -k 4|head 检查发现使用内存的都…

【每日一题】1465. 切割后面积最大的蛋糕-2023.10.27

题目&#xff1a; 1465. 切割后面积最大的蛋糕 矩形蛋糕的高度为 h 且宽度为 w&#xff0c;给你两个整数数组 horizontalCuts 和 verticalCuts&#xff0c;其中&#xff1a; horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离verticalCuts[j] 是从矩形蛋糕的左侧到…

LeetCode 1465. 切割后面积最大的蛋糕:纵横分别处理

【LetMeFly】1465.切割后面积最大的蛋糕&#xff1a;纵横分别处理 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-area-of-a-piece-of-cake-after-horizontal-and-vertical-cuts/ 矩形蛋糕的高度为 h 且宽度为 w&#xff0c;给你两个整数数组 horizontalCut…

LeetCode209——长度最小的子数组

LeetCode209——长度最小的子数组 题目描述&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数…

【LeetCode:1465. 切割后面积最大的蛋糕 | 贪心 + 排序】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

高校打造动捕实训室:开启元宇宙创新教育时代

随着科技的发展&#xff0c;高校教育面临着新的挑战与机遇。高校动捕实训室涉及多个学科领域&#xff0c;如艺术学院、设计学院、新媒体学院等&#xff0c;适用于动画、视觉传达、数码媒体、数字媒体艺术等专业。动捕实训室可以为学生提供创意发挥的空间&#xff0c;使用动捕设…

【文末送书】GPT如何赋能软件研发全流程

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

Typora(morkdown编辑器)的安装包和安装教程

Typora&#xff08;morkdown编辑器&#xff09;的安装包和安装教程 下载安装1、覆盖文件2、输入序列号①打开 typora &#xff0c;点击“输入序列号”&#xff1a;②邮箱一栏中任意填写&#xff08;但须保证邮箱地址格式正确&#xff09;&#xff0c;输入序列号&#xff0c;点击…

Web3 治理实践探讨:如何寻找多元化发展路径?

Web3 领域变革正崭露头角&#xff0c;而社区治理开始成为行业热议话题。Web3 项目如何探寻多元化建设的解困路径&#xff0c;究竟是治理模型的精进成为首要问题&#xff0c;还是吸纳更多资金与组织教育培训&#xff0c;让开发者成为项目建设的中坚力量&#xff1f;本期 TinTinW…

聚量推客滴滴学生认证app地推网推拉新升级啦

“聚量推客”滴滴学生认证项目升级 滴滴学生认证升级后分为微信推广版本和支付宝推广版本两种码 根据自己需要选择推广场景&#xff0c;适合地推和网推

ReentranLock超详细讲解

目录 ReentranLockAQS底层AQS的变量、常量与内部类Node内部类 FairSync&#xff1a;公平锁lock方法AbstractQueuedSynchronizer的acquire方法tryAcquire方法getState方法setExclusiveOwnerThread方法总结tryAcquire方法 返回AbstractQueuedSynchronized的acquire方法acquireQue…

「AI知多少」第二期推荐《AIGC:智能创作时代》

一、书名 《AIGC&#xff1a;智能创作时代》 二、简介 在人工智能发展的漫长历程中&#xff0c;如何让机器学会创作一直被视为难以逾越的天堑&#xff0c;“创造力”也因此被视为人类与机器最本质的区别之一。然而&#xff0c;人类的创造力也终将赋予机器创造力&#xff0c;…