C++ 模板类的示例-数组

类模板可以有非通用类型参数:1)通常是整型(C++20标准可以用其它的类型);2)实例化模板时必须用常量表达式;3)模板中不能修改参数的值;4)可以为非通用类型参数提供默认值。
优点:在栈上分配内存,易维护,执行速度快,合适小型数组。
缺点:在程序中,不同的非通用类型参数将导致编译器生成不同的类。
构造函数的方法更通用,因为数据的大小是类的成员(而不是硬编码),可以创建数组大小可变的类。

#include <iostream>         // 包含头文件。
using namespace std;        // 指定缺省的命名空间。template <class T,int len=10>
class Array
{
private:T items[len];      // 数组元素。
public:Array()    {}    	   // 默认构造函数。~Array() {}         // 析构函数T& operator[](int ii) { return items[ii]; }  // 重载操作符[],可以修改数组中的元素。const T& operator[](int ii) const { return items[ii]; }  // 重载操作符[],不能修改数组中的元素。
};template <class T>
class Vector
{
private:int len;               // 数组元素的个数。T*  items;           // 数组元素。
public:// 默认构造函数,分配内存。Vector(int size=10):len(size) {items = new T[len];}~Vector() {         // 析构函数delete[] items; items = nullptr;}void resize(int size) {         // 护展数组的内存空间。if (size <= len) return;   // 只能往更大扩展。T* tmp = new T[size];   // 分配更大的内存空间。for (int ii = 0; ii < len; ii++) tmp[ii] = items[ii];     // 把原来数组中的元素复制到新数组。delete[] items;    // 释放原来的数组。items = tmp;      // 让数组指针指向新数组。len = size;           // 扩展后的数组长度。}int size() const { return len; }     // 获取数组长度。T& operator[](int ii) {   // 重载操作符[],可以修改数组中的元素。if (ii >= len) resize(ii + 1);    // 扩展数组。return items[ii]; }const T& operator[](int ii) const { return items[ii]; }  // 重载操作符[],不能修改数组中的元素。
};int main()
{// Array<string,10> aa;  // 创建模板类Array的对象。Vector<int> aa(1);     // 创建模板类Vector的对象。aa[0] = 5; aa[1] = 8; aa[2] = 3; aa[3] = 2; aa[4] = 7; // aa[0] = "西施"; aa[1] = "冰冰"; aa[2] = "幂幂"; aa[3] = "金莲"; aa[4] = "小乔";for (int ii=0; ii<5;ii++) cout << "aa[" << ii << "]=" << aa[ii] << endl;
}

推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/3Zqhgt

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

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

相关文章

Android中使用performClick触发点击事件

Android中使用performClick触发点击事件 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨在Android开发中如何使用 performClick() 方法来触发点击…

数据库-python SQLite3

数据库-python SQLite3 一&#xff1a;sqlite3 简介二: sqlite3 流程1> demo2> sqlite3 流程 三&#xff1a;sqlite3 step1> create table2> insert into3> update4> select1. fetchall()2. fetchone()3. fetchmany() 5> delete6> other step 四&#…

Spark join数据倾斜调优

Spark中常见的两种数据倾斜现象如下 stage部分task执行特别慢 一般情况下是某个task处理的数据量远大于其他task处理的数据量&#xff0c;当然也不排除是程序代码没有冗余&#xff0c;异常数据导致程序运行异常。 作业重试多次某几个task总会失败 常见的退出码143、53、137…

【电路笔记】-放大器类型

放大器类型 文章目录 放大器类型1、概述2、关于偏置的注意事项3、A类(Class A)放大器4、B类(Class B)放大器5、AB类(Class AB)放大器6、C类(Class C)放大器7、总结1、概述 放大器通常根据输出级的结构进行分类。 事实上,功率放大确实发生在该阶段,因此输出信号的质量和…

Arduino (esp ) 下String的内存释放

在个人的开源项目 GitHub - StarCompute/tftziku: 这是一个通过单片机在各种屏幕上显示中文的解决方案 中为了方便快速检索使用了string&#xff0c;于是这个string在esp8266中占了40多k,原本以为当string设置为""的时候这个40k就可以回收&#xff0c;结果发觉不行…

【JS异步编程】async/await——用同步代码写异步

历史小剧场 懂得暴力的人&#xff0c;是强壮的&#xff1b;懂得克制暴力的人&#xff0c;才是强大的。----《明朝那些事儿》 什么是 async/await async: 声明一个异步函数 自动将常规函数转换成Promise&#xff0c;返回值也是一个Promise对象&#xff1b;只有async函数内部的异…

Java SE入门及基础(59) 线程的实现(上) 线程的创建方式 线程内存模型 线程安全

目录 线程&#xff08;上&#xff09; 1. 线程的创建方式 Thread类常用构造方法 Thread类常用成员方法 Thread类常用静态方法 示例 总结 2. 线程内存模型 3.线程安全 案例 代码实现 执行结果 线程&#xff08;上&#xff09; 1. 线程的创建方式 An application t…

利用 Docker 简化 Nacos 部署:快速搭建 Nacos 服务

利用 Docker 简化 Nacos 部署&#xff1a;快速搭建 Nacos 服务 引言 在微服务架构中&#xff0c;服务注册与发现是确保服务间通信顺畅的关键组件。Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;作为阿里巴巴开源的一个服务发现和配置管理平台&…

任务调度器——任务切换

一、开启任务调度器 函数原型&#xff1a; void vTaskStartScheduler( void ) 作用&#xff1a;用于启动任务调度器&#xff0c;任务调度器启动后&#xff0c; FreeRTOS 便会开始进行任务调度 内部实现机制&#xff08;以动态创建为例&#xff09;&#xff1a; &#xff0…

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 下载页 ->Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人…

测评推荐:企业管理u盘的软件有哪些?

U盘作为一种便携的存储设备&#xff0c;方便易用&#xff0c;被广泛应用于企业办公、个人学习及日常工作中。然而&#xff0c;U盘的使用也带来了数据泄露、病毒传播等安全隐患。为了解决这些问题&#xff0c;企业管理U盘的软件应运而生。 本文将对市面上流行的几款U盘管理软件…

Hadoop3:Yarn容量调度器配置多队列案例

一、情景描述 需求1&#xff1a; default队列占总内存的40%&#xff0c;最大资源容量占总资源60%&#xff0c;hive队列占总内存的60%&#xff0c;最大资源容量占总资源80%。 二、多队列优点 &#xff08;1&#xff09;因为担心员工不小心&#xff0c;写递归死循环代码&#…

数据处理:四选一、四关联

今天去面试&#xff0c;面试官们给我一个‘选择’&#xff0c;有四个选项&#xff1a;‘展示你的才华’、‘展示你的美貌’、‘展示你的才华与美貌’、‘都不展示’ {label: “选择”,children: [{label: “展示你的才华”,children: [],isShow: talentModal,click: () > {i…

电路笔记(电源模块): 基于FT2232HL实现的jtag下载器硬件+jtag的通信引脚说明

JTAG接口说明 JTAG 接口根据需求可以选择20针或14针的配置&#xff0c;具体选择取决于应用场景和需要连接的功能。比如之前的可编程逻辑器件XC9572XL使用JTAG引脚&#xff08;TCK、TDI、TDO、TMS、VREF、GND&#xff09;用于与器件进行调试和编程通信。更详细的内容可以阅读11…

51单片机STC8H8K64U通过RA8889/RA8876如何控制彩屏(SPI源码下载)

【硬件部份】 一、硬件连接实物&#xff1a; STC8H系列单片机不需要外部晶振和外部复位&#xff0c;在相同的工作频率下&#xff0c;速度比传统的8051单片机要快12倍&#xff0c;具有高可靠抗干扰的优秀特性&#xff0c;与瑞佑的RA8889/RA8876控制芯片刚好可以完美搭配用于工…

redis实战-缓存雪崩问题及解决方案

定义理解 缓存雪崩是指在同一时间段&#xff0c;大量缓存的key同时失效&#xff0c;或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力 和缓存击穿的区别&#xff1a; 缓存雪崩是由于缓存中的大量数据同时失效或缓存服务器故障引起的&#xff1b…

(漏洞检查项) | 服务端请求伪造 SSRF

(漏洞检查项)|服务端请求伪造 SSRF 漏洞场景 服务端请求伪造&#xff08;SSRF&#xff0c;Server-Side Request Forgery&#xff09;漏洞发生在应用程序允许攻击者通过构造恶意请求&#xff0c;利用服务器端发起HTTP请求&#xff0c;并访问内部资源或进行其他未授权操作。 漏…

css_20_定位

相对定位 设置相对定位 给元素设置 position: relative 即可实现相对定位。 可以使用 left、right、top 、 bottom 四个属性调整位置。 相对定位的参考点是相对自己原来的位置相对定位的特点&#xff1a; 1&#xff0e;不会脱离文档流&#xff0c;元素位置的变化&#xff0c;只…

机器学习周记(第四十五周:Graphformer)2024.6.24~2024.6.30

目录 摘要ABSTRACT1 论文信息1.1 论文标题1.2 论文摘要1.3 论文引言1.4 论文贡献 2 论文模型2.1 问题定义2.2 模型架构2.2.1 自注意下采样模块&#xff08;Self-attention down-sampling module&#xff09;2.2.2 稀疏图自注意力机制&#xff08;Sparse graph self-attention m…

python自动移除excel文件密码(小工具)

安装 msoffcrypto-tool 使用pip命令安装: 打开命令行工具&#xff08;如终端、命令提示符或Powershell&#xff09;&#xff0c;然后输入以下命令来安装msoffcrypto-tool&#xff1a; pip install msoffcrypto-tool库&#xff0c;进行自动移除excel文件密码 import msoffcrypt…