当前位置: 首页 > news >正文

C++——数组类模板

1.模板参数可以是数值型参数(非类型参数)

模板参数是在编译阶段被处理的单元,所以在编译阶段必须准确无误的唯一确定

变量、浮点数、类对象不能作为模板参数

示例:使用模板参数计算1+2+...+N

#include <iostream> #include<string> using namespace std; template<typename T, int N> void func(){ T a[N] = {0}; for (int i = 0; i < N; i++) { a[i] = i; } for (int i = 0; i < N; i++) { cout << a[i] << endl; } } template<int N> class Sum { public: static const int VALUE = Sum<N - 1>::VALUE + N; }; //类模板特化 template<> class Sum<1> { public: static const int VALUE = 1; //静态常量,属于类本身(无需创建对象即可访问) }; int main() { //Sum<100> 会在编译期通过这种递归推导,直接算出 1+2+...+100 = 5050,运行时只是把这个预计算好的常量值打印出来 cout << "1+2+3+...+100=" << Sum<100>::VALUE << endl; //1+2+3+...+100=5050 return 0; }

使用分文件的方式

Complex.h

#pragma once template<typename T,int N> class Array { T m_array[N]; public: int length(); bool set(int index, T value); bool get(int index, T& value); T& operator[](int index); T operator[](int index) const; //数组类对象有可能是const对象 virtual ~Array(); //如果该类有可能被继承,则将析构函数写为虚函数 }; template<typename T,int N> int Array<T, N>::length() { return N; } template<typename T,int N> bool Array<T, N>::set(int index, T value) { bool ret = (0 <= index) && (index < N); if (ret) { m_array[index] = value; } return ret; } template<typename T, int N> bool Array<T, N>::get(int index, T& value) { bool ret = (0 <= index) && (index < N); if (ret) { value = m_array[index]; } return ret; } template<typename T, int N> T& Array<T, N>::operator[](int index) { return m_array[index]; } template<typename T, int N> T Array<T, N>::operator[](int index) const { return m_array[index]; } template<typename T,int N> Array<T, N>::~Array() { }

main.cpp

#include <iostream> #include<string> using namespace std; #include "Complex.h" int main() { Array<double, 5> ad; for (int i = 0; i < ad.length(); i++) { ad[i] = i * i; } for (int i = 0; i < ad.length(); i++) { cout << ad[i] << endl; } return 0; }

运行结果:

0
1
4
9
16

http://www.jsqmd.com/news/485240/

相关文章:

  • LCM,GCD
  • 5款降AI工具实测对比:价格从4块到10块效果差多少
  • 什么是 SMD 封装?是不是都不带引脚?
  • 宝宝敏感肌安心护肤油
  • Java面试复盘笔记,2026突击必备!
  • Matlab速成笔记七十三:三角函数运算的用法
  • 虚拟机安装流程
  • Docker 核心知识点
  • 国产AI驱动的超自动化巡检“龙虾”来了
  • 基于SpringBoot的中华历史故事展播系统设计与应用
  • 微短剧《嘉庆君游台湾》开机 童星麦片(吴羽朔)助力嘉庆渡台行
  • 古镇文旅旧改活化优质公司推荐:游玩体验提升效果解析
  • 智能体驱动的企业IT架构转型
  • AI 编程能力边界探索:一次 Claude Code 实战,揭开 Spec Coding 的真正价值
  • 打家劫舍 和 打家劫舍 II
  • 第7章 基、坐标与线性变换:空间的视角与重构
  • Thinkphp和Laravel框架都支持基于微信小程序的校园互助论坛学习社区95l77
  • 统计人专属!手把手教你 DIY 专属 VBA 统计插件000→窗体篇
  • linux的环境配置
  • 技术深度:模型预测控制(MPC)储能控制策略与多目标哈里斯鹰(MOHHO)算法储能容量配置研究
  • C语言(内存泄漏和野指针)
  • 天虹提货劵回收价格如何,回收平台哪家更突出 - 京回收小程序
  • Java中的时区规则库
  • 互联网大厂Java面试实录:严肃面试官与搞笑程序员蔡虚昆的较量
  • 刷招聘软件时的迟疑?AI大模型才是程序员的新底气
  • Python编程环境搭建指南:安装Python解释器和PyCharm
  • 2024提示系统风险评估新工具:架构师正在用的3款开源风险评估框架
  • 薄膜铂电阻元件助力食品机械与制药行业实现卫生级测温 - 品牌推荐大师1
  • AI产品单月狂赚2000万美元,大模型训练师成普通人红利风口
  • C盘清理技巧分享(win11系统)