本文基于《数据结构、算法与应用C++语言描述》一书。其中,在第一章的练习2中,有一个题目是这样描述的:
编写一个模板函数 count,返回值是数组 a[0:n-1] 中 value 出现的次数。测试你的代码。书中给出的代码是这样的:
template
T count(T a[], int n, const T& value)
{
int theCount = 0;
for(int i = 0;
i < n;
i++)
if(a[i] == value)
theCount++;
return theCount;
}
但是出于好奇想要尝试一下以引用的方式去传递这个数组,于是有
template
T count(T (&a)[n], const T& value)
{
int i, t;
t = 0;
// t -> time
for(i = 0;
i < n;
i++)
if(a[i] == value)
++t;
return t;
}
完整代码
#include
#include using namespace std;
template
T count(T (&a)[n], const T& value)
{
int i, t;
t = 0;
// t -> time
for(i = 0;
i < n;
i++)
if(a[i] == value)
++t;
return t;
}int main()
{
int a[6] = {1, 2, 3, 4, 1, 1};
cout << "a[0:5] = ";
copy(a, a+6, ostream_iterator(cout, " "));
cout << "\n";
cout << "count(a, 1) = " << count(a, 1) << "\n";
cout << "count(a, 2) = " << count(a, 2) << "\n";
system("pause");
return 0;
}
【模板函数中以引用的方式传递数组】结果
a[0:5] = 1 2 3 4 1 1
count(a, 1) = 3
count(a, 2) = 1
参考列表
- How to write a template function that takes an array and an int specifying array size
- Data Structures, Algorithms, & Applications in C++ Chapter 1, Exercise 2
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题