类模板

有序数组(类模板)

↘锁芯ラ 提交于 2020-01-03 10:12:00
实现一个类模板,它可以接受一组数据,能对数据排序,也能输出数组的内容。 每行输入的第一个数字为0,1,2或3:为0时表示输入结束; 为1时表示将输入整数,为2时表示将输入有一位小数的浮点数,为3时表示输入字符。 如果第一个数字非0,则接下来将输入一个正整数,表示即将输入的数据的数量。 从每行第三个输入开始,依次输入指定类型的数据 测试程序: #include <iostream> using namespace std; /* 请在这里填写答案 */ template<class T> MyArray<T>::~MyArray(){ delete[] data;} template<class T> bool MyArray<T>::check(){ int i; for(i=0;i<size-1;i++) if(data[i]>data[i+1]) { cout<<"ERROR!"<<endl;return false;} return true; } int main( ) { MyArray<int> *pI; MyArray<float> *pF; MyArray<char> *pC; int ty, size; cin>>ty; while(ty>0){ cin>>size; switch(ty){ case 1: pI = new MyArray<int>(size);

C++数组类模板

核能气质少年 提交于 2020-01-03 10:11:45
* 作为数组类模板,肯定没有vector做得好,可是普通的数组有1个优点就是能直接操作内存。vector在这方面就不是非常方便了。网上尽管也有数组类模板。多维的设计基本上都不是非常好。我这个类模板多维的设计借鉴了vector,如2维数组vector<vector<int>> vvArr;下附源代码*/ #pragma once enum E_POSIITION { begin_position = 0, end_position }; // CBaseArray作为一个最原始基类,不同意构造对象 template <class T> class CBaseArray { protected: CBaseArray():m_pTMemory(NULL),m_uMemSize(0) { } virtual ~CBaseArray() { } public: // member method const T* GetMemory(UINT _uIdx = 0) const { ASSERT(_uIdx < m_uMemSize); return m_pTMemory+_uIdx; } T* GetMemory(UINT _uIdx = 0) { ASSERT(_uIdx < m_uMemSize); return m_pTMemory+_uIdx; } const UINT

C++——模板、数组类

拥有回忆 提交于 2020-01-03 10:11:29
1、函数模板: 可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。 声明方法: template<typename 标识符> 函数声明 求绝对值的模板 #include<iostream> ……编译器从调用abs函数时实参的类型,推导出函数模板的类型参数。 using namespace std; ……如该题从调用abs(int)推导出模板中类型参数T为int型。 template<typename T> ……当类型参数的含义确定后,编译器将函数模板为样板,生成一个函数: T abs(T x) …… int abs(int x) { return x<0?-x:x; } ……{return x<0?-x:x;} int main() { int n=-5; double d=-5.5; cout<<abs(n)<<endl; cout<<abs(d)<<endl; }//运行结果:5 5.5 2、类模板: 使用类模板用户可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型(包括基本类型和自定义类型)。 类模板声明: template <模板参数表> class 类名 {类成员声明} 如果需要在类模板之外定义其成员函数,则要采用 template <模板参数表> 类型名 类名<T>::函数名(参数表)

Unity 单例的父类模板

半世苍凉 提交于 2019-12-26 19:13:26
C#单例父类 转载 正文 如何设计这个单例的模板? 总结 转载 终于找到了之前关于单例父类的一个问题解决方法,是使用反射解决。 这里转载分享一下: Unity 游戏框架搭建 (二) 单例的模板 正文 如何设计这个单例的模板? 先分析下需求,当设计一个manager时候,我们希望整个程序只有一个该manager对象实例,一般马上能想到的实现是这样的: public class XXXManager { private static XXXManager instance = null ; private XXXManager { // to do ... } public static XXXManager ( ) { if ( instance == null ) { instance = new XXXManager ( ) ; } return instance ; } } 如果一个游戏需要10个各种各样的manager,那么以上这些代码要复制粘贴好多遍。重复的代码太多!!!想要把重复的代码抽离出来,怎么办?答案是引入泛型。实现如下: using System ; using System . Collections . Generic ; using System . Text ; using System . Reflection ; namespace

ssh备考-08 spring的JDBC模板以及事务

余生颓废 提交于 2019-12-26 01:14:49
目录 一、spring JDBC模板的使用 1.搭建环境 建表: 新建后台工程 2.写applicationContext.xml配置文件 3.测试模板类的使用 JDBCDemo1.java 4.补充:以后主要使用c3p0连接池 其实都一样,配法不同而已 5.jbdc模板类具体方法使用学习(学过hibernate就都很简单了 )(了解) 二、Spring框架的事务管理 1.搭建基本环境 2.引入xml 注意学会配置 applicationContext.xml AccountDao.java AccountDaoImpl.java AccountService.java AccountServiceImpl.java 测试类:TestAction.java 今日资料下载: 直接下载spring02.zip 网盘备份下载 一、spring JDBC模板的使用 1.搭建环境 建表: use spring02; create table t_account( id int primary key auto_increment, name varchar(20), money double ); 新建后台工程 2.写applicationContext.xml配置文件 注入两个类 连接池类:DriverManagerDataSource 和模板类:jdbcTemplate 两个正常的类

C++ STL 教程

拟墨画扇 提交于 2019-12-25 12:05:04
在前面的章节中,我们已经学习了 C++ 模板的概念。C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。 C++ 标准模板库的核心包括以下三个组件: 组件 描述 容器(Containers) 容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。 算法(Algorithms) 算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。 迭代器(iterators) 迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。 这三个组件都带有丰富的预定义函数,帮助我们通过简单的方式处理复杂的任务。 下面的程序演示了向量容器(一个 C++ 标准的模板),它与数组十分相似,唯一不同的是,向量在需要扩展大小的时候,会自动处理它自己的存储需求: 实例 #include <iostream> #include <vector> using namespace std; int main() { // 创建一个向量存储 int vector<int> vec; int i; // 显示 vec 的原始大小 cout << "vector size = " << vec

C++类模板的三种特化

给你一囗甜甜゛ 提交于 2019-12-24 12:26:42
说起C++的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多。我这里归纳了针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型; 二是特化为引用,指针类型;三是特化为另外一个类模板。 这里用一个简单的例子来说明这三种情况: // general version template < class T > class Compare { public : static bool IsEqual( const T & lh, const T & rh) { return lh == rh; } }; 这是一个用于比较的类模板,里面可以有多种用于比较的函数, 以IsEqual为例。 一、特化为绝对类型 也就是说直接为某个特定类型做特化,这是我们最常见的一种特化方式, 如特化为float, double等 // specialize for float template <> class Compare < float > { public : static bool IsEqual( const float & lh, const float & rh) { return abs(lh - rh) < 10e - 3 ; } }; // specialize for double template <> class Compare <

C++ STL 教程

烈酒焚心 提交于 2019-12-23 01:29:55
Table of Contents C++ STL 教程 实例 C++ STL 教程 在前面的章节中,我们已经学习了 C++ 模板的概念。C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。 C++ 标准模板库的核心包括以下三个组件: 组件 描述 容器(Containers) 容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。 算法(Algorithms) 算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。 迭代器(iterators) 迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。 这三个组件都带有丰富的预定义函数,帮助我们通过简单的方式处理复杂的任务。 下面的程序演示了向量容器(一个 C++ 标准的模板),它与数组十分相似,唯一不同的是,向量在需要扩展大小的时候,会自动处理它自己的存储需求: 实例 #include <iostream> #include <vector> using namespace std; int main() { // 创建一个向量存储 int vector<int> vec; int i; //

模板的声明和实现为何要放在头文件中?

人盡茶涼 提交于 2019-12-21 07:23:00
源: http://blog.csdn.net/lqk1985/archive/2008/10/24/3136364.aspx 如何组织编写模板程序 发表日期: 1/21/2003 12:28:58 PM 发表人: Nemanja Trifunovic 前言 常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Boost的模板类,都能体会到这样的滋味:接口简单,操作复杂。 我在5年前开始使用模板,那时我看到了MFC的容器类。直到去年我还没有必要自己编写模板类。可是在我需要自己编写模板类时,我首先遇到的事实却是 “传统”编程方法(在*.h文件声明,在*.cpp文件中定义)不能用于模板。于是我花费一些时间来了解问题所在及其解决方法。 本文对象是那些熟悉模板但还没有很多编写模板经验的程序员。本文只涉及模板类,未涉及模板函数。但论述的原则对于二者是一样的。 问题的产生 通过下例来说明问题。例如在array.h文件中有模板类array: // array.h template <typename T, int SIZE> class array { T data_[SIZE]; array (const array& other); const array& operator =

第16章模板与泛型编程

一笑奈何 提交于 2019-12-21 03:36:21
一、函数模板 /*--> */ /*--> */ template <typename T1,typename T2> int function(const T1 & t1,const T2 &t2){} 尖括号内部的参数叫模板参数。 1.实例化函数模板 编译器用函数实参推断模板实参。这些编译器生成的版本被称为模板的实例。 2.模板类型参数 模板类型参数是可以用来表示返回类型或函数参数类型,以及在函数体内用于变量声明或类型转换的参数,如下程序所示。必须说明非类型模板参数并不是表示类型的参数,而是表示具体数值的参数,详见下文。 template <typename T> T foo(T *p) { T tmp=*p; return tmp; } 3.非类型模板参数 非类型模板参数表示一个值不是一个类型!!通过定义特定的类型名来指定参数,而不是typename或class。 非类型模板参数是一个常量值,在需要常量表达式的地方,可以使用非类型参数,比如数组的大小。 非类型模板参数的模板实参必须是常量表达式!! template <unsigned N,unsigned M> int compare(const char (&p1)[N],const char (&p2)[M]) { return strcmp(p1,p2); } 当调用compare("hi","mom")时