2015-10-20 61 views
2

對於大學練習,我被要求編寫一個模板函數「print();」,它帶有兩個參數,1:一個數組一個泛型類型,2:一個int,指定數組的大小。然後該函數應該將數組中的每個項目打印到控制檯。我在函數參數上遇到了一些麻煩。我公司目前擁有的代碼是:如何編寫一個模板函數,它需要一個數組和一個指定數組大小的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); 

顯然把數組作爲參數沒有返回值,所以我不知道還能做什麼。有任何想法嗎?

+1

它是精細傳遞一個指針(數組到指針腐爛後),或者你想採取通過引用數組? – emlai

+0

(在第一種情況下,你可以通過非靜態數組) – emlai

+0

道歉,我不確定,我只寫了這個問題到底是什麼教科書問我。 – willfo

回答

9

寫它的正確方法是

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); 
} 

打印

1 2 3 4 99 
+0

謝謝,當我在main函數中調用函數時,我究竟會輸入什麼參數?如果你能給我一個很好的例子,我是新來的C++! – willfo

+0

需要更多的範圍。如果需要索引,Boost.Range'索引';) –

+1

@willfo增加了一個實例 – sehe

4

如果喲ü要通過引用傳遞數組,你可以

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); 

LIVE

否則,您可以通過指針傳遞,注意數組將衰減到指針,你必須保證傳遞的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)); 

LIVE

+0

請注意,傳遞(指針+大小)是C++中的一種反模式。正因爲這個原因,GSL定義了'array_view' – sehe

相關問題