如何编写一个模板函数,它接受一个数组和一个指定数组大小的 int
How to write a template function that takes an array and an int specifying array size
为了大学练习,我被要求编写一个模板函数 "print();",它有两个参数,1:泛型数组,和 2:指定数组大小的 int .然后该函数应将数组中的每个项目打印到控制台。我在函数参数方面遇到了一些麻烦。我目前的代码是:
template <typename Type>
Type print (Type a, Type b)
{
Type items;
Type array;
a = array;
b = items;
for (int i = 0; i < items; i++) {
std::cout << std::endl << "The element of the index " << i << " is " << array << std::endl;
std::cout << std::endl;
}
在 main() 中:
print(Array[], 10);
显然将 Array 作为参数并没有返回值,所以我不确定还能做什么。有什么想法吗?
正确的写法是
#include <iostream>
template <typename T, size_t size> void print(const T (&array)[size])
{
for(size_t i = 0; i < size; ++i)
std::cout << array[i] << " ";
}
int main() {
int arr[] = { 1,2,3,4,99};
print(arr);
}
版画
1 2 3 4 99
如果你想通过引用传递数组,你可以
template <typename T, size_t SIZE>
void print(const T(&array)[SIZE])
{
for (size_t i = 0; i < SIZE; i++)
std::cout << array[i] << " ";
}
然后,例如
int x[] = {1, 2, 3};
print(x);
否则,你可以通过指针传递,注意数组会衰减为指针,你必须保证SIZE
传递的正确性。
template <typename T>
void print(const T array[], size_t SIZE)
{
for(size_t i = 0; i < SIZE; i++)
std::cout << array[i] << " ";
}
然后,例如
int x[] = {1, 2, 3};
print(x, sizeof(x) / sizeof(int));
为了大学练习,我被要求编写一个模板函数 "print();",它有两个参数,1:泛型数组,和 2:指定数组大小的 int .然后该函数应将数组中的每个项目打印到控制台。我在函数参数方面遇到了一些麻烦。我目前的代码是:
template <typename Type>
Type print (Type a, Type b)
{
Type items;
Type array;
a = array;
b = items;
for (int i = 0; i < items; i++) {
std::cout << std::endl << "The element of the index " << i << " is " << array << std::endl;
std::cout << std::endl;
}
在 main() 中:
print(Array[], 10);
显然将 Array 作为参数并没有返回值,所以我不确定还能做什么。有什么想法吗?
正确的写法是
#include <iostream>
template <typename T, size_t size> void print(const T (&array)[size])
{
for(size_t i = 0; i < size; ++i)
std::cout << array[i] << " ";
}
int main() {
int arr[] = { 1,2,3,4,99};
print(arr);
}
版画
1 2 3 4 99
如果你想通过引用传递数组,你可以
template <typename T, size_t SIZE>
void print(const T(&array)[SIZE])
{
for (size_t i = 0; i < SIZE; i++)
std::cout << array[i] << " ";
}
然后,例如
int x[] = {1, 2, 3};
print(x);
否则,你可以通过指针传递,注意数组会衰减为指针,你必须保证SIZE
传递的正确性。
template <typename T>
void print(const T array[], size_t SIZE)
{
for(size_t i = 0; i < SIZE; i++)
std::cout << array[i] << " ";
}
然后,例如
int x[] = {1, 2, 3};
print(x, sizeof(x) / sizeof(int));