如何编写一个模板函数,它接受一个数组和一个指定数组大小的int

wil*_*lfo 2 c++ arrays function template-function

对于大学练习,我被要求编写一个模板函数"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;
    }
Run Code Online (Sandbox Code Playgroud)

并在main()中:

    print(Array[], 10);
Run Code Online (Sandbox Code Playgroud)

显然将Array作为参数放置并不返回值,所以我不知道还能做什么.有任何想法吗?

seh*_*ehe 12

写它的正确方法是

Live On Coliru

#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);
}
Run Code Online (Sandbox Code Playgroud)

打印

1 2 3 4 99
Run Code Online (Sandbox Code Playgroud)


son*_*yao 5

如果你想通过引用传递数组,你可以

template <typename T, size_t SIZE>
void print(const T(&array)[SIZE])
{
    for (size_t i = 0; i < SIZE; i++)
        std::cout << array[i] << " ";
}
Run Code Online (Sandbox Code Playgroud)

然后,例如

int x[] = {1, 2, 3};
print(x);
Run Code Online (Sandbox Code Playgroud)

居住

否则可以通过指针传递,注意数组会衰减为指针,必须保证SIZE传递的正确性。

template <typename T>
void print(const T array[], size_t SIZE)
{
    for(size_t i = 0; i < SIZE; i++)
        std::cout << array[i] << " ";
}
Run Code Online (Sandbox Code Playgroud)

然后,例如

int x[] = {1, 2, 3};
print(x, sizeof(x) / sizeof(int));
Run Code Online (Sandbox Code Playgroud)

居住