模板函数中以引用的方式传递数组

本文基于《数据结构、算法与应用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

参考列表
  1. How to write a template function that takes an array and an int specifying array size
  2. Data Structures, Algorithms, & Applications in C++ Chapter 1, Exercise 2

    推荐阅读