2013-03-18 48 views
0

我知道你可以創建模板,使函數接受整型,雙,浮法。但是,你可以「模板化」一個函數,以便它可以接受數組和向量?你能製作一個模板來接受C++中的向量和數組嗎?

+1

類-的。簡單的方法是提供帶有一對指定有效範圍的迭代器的模板。 – juanchopanza 2013-03-18 12:50:44

+1

http://stackoverflow.com/questions/9373363/c-template-function-for-arrays-vectors-built-in-types-stl – 2013-03-18 12:50:57

回答

3

通常的答案是寫一個模板函數,它接受一對迭代器作爲參數。因爲指針也是迭代器,所以可以使用指向第一個和第一個指針的指針調用您的函數,該指針經過數組的末尾元素。

E.g.

template <class II> 
void print_all(II first, II last) 
{ 
    for (II i = first; i != last; ++i) 
    cout << *i << ' '; 
    cout << '\n'; 
} 

vector<int> v; 
int a[10]; 
... 
print_all(v.begin(), v.end()); 
print_all(a, a + 10); 
+1

1聰明溶液 – 2013-03-18 12:54:08

+2

'print_all(標準::開始(a)中,標準::(a)結束)' – Xeo 2013-03-18 13:00:45

+0

print_all的情況下(開始(一),(a)結束) 你應該使用ADL我的自定義類型定義了它自己的開始()和end()函數。 – bstamour 2013-03-18 14:03:18

相關問題