,,,,,,,,之前我们学习了类模板,今天我们来看看数组类模板。模板参数可以是数值型参数(非类型参数),如下
,,,,,,,使用数值型模板参数是有的,如:. .
,,,,,,,,下来我们用函数模板来实现一个面试题:用最高效的方法求1 + 2 + 3 +…+ N的值。
# include & lt; iostream> # include & lt; string> using namespace 性传播疾病; 模板 & lt;, typename T, int N 比; void Func () { ,,,T 一个[N],=, {0}; ,,,, ,,,(int i=0, i:: VALUE +, N; }; 模板 & lt;,在 class Sum & lt;, 1,在 { 公众: ,,,static const int VALUE =, 1; }; int main () { ,,,cout & lt; & lt;,“1 + 2 + 3 +…+ 10,=,,, & lt; & lt;, Sum<10祝辞::VALUE & lt; & lt;, endl; ,,,cout & lt; & lt;,“1 + 2 + 3 +…+ 100,=,,, & lt; & lt;, Sum<100祝辞::VALUE & lt; & lt;, endl; ,,,, ,,,return 0; }
,,,,,,,,我们通过用函数模板来实现递归的定义,递归的出口为它的完全特化为1时。下来我们来看看编译结果
,,,,,,,,我们看到已经实现了这个功能。下来我们再来实现数组类的模板
数组。h源码
# ifndef _ARRAY_H_ # define _ARRAY_H_ 模板 & lt;, typename T, int N 比; class 数组 { ,,,T m_array [N]; 公众: ,,,int 长度(); ,,,bool 设置(int 指数,T 价值); ,,,bool 得到(int 指数,T&,值); ,,,T&,运营商[],(int 指数); ,,,T 运营商[],(int 指数),常量; ,,,virtual ~数组(); }; 模板 & lt;, typename T, int N 比; int Array::长度() { ,,,return N; } 模板 & lt;, typename T, int N 比; bool Array ::设置(int 指数,T 价值) { ,,,bool ret =, (=0, & lt;指数),,,,(index & lt;, N); ,,,, ,,,如果,ret ) ,,,{ ,,,,,,,m_array(指数),=,价值; ,,,} ,,,, ,,,return 回收; } 模板 & lt;, typename T, int N 比; bool Array :: (int 指数,T&,值) { ,,,bool ret =, (=0, & lt;指数),,,,(index & lt;, N); ,,,, ,,,如果,ret ) ,,,{ ,,,,,,,value =, m_array(指数); ,,,} ,,,, ,,,return 回收; } 模板 & lt;, typename T, int N 比; T&, Array ::运营商[],(int 指数) { ,,,return m_array(指数); } 模板 & lt;, typename T, int N 比; T Array ::运营商[],(int 指数),const { ,,,return m_array(指数); } 模板 & lt;, typename T, int N 比; Array 数组::~ () { ,,,, } # endif
测试。cpp源码
# include & lt; iostream> # include & lt; string> # include “Array.h" using namespace 性传播疾病; int main () { ,,,Array<双,5祝辞,广告; ,,,, ,,,(int i=0, i数组类模板(四十九)