2015-10-21 30 views
2

先謝謝您!如何將數組<int, 6>傳遞給函數

所以我想傳遞一個數組到一個函數,但我遇到了麻煩。

我的數組聲明如下:

array<int, 6> yourNumbers {0,1,2,3,4,5}; 

我試圖將它傳遞給一個函數來重複號碼進行檢查。我這樣做是因爲我想要一個可以重用的函數來檢查不同的數組。任何輸入?

這是我到目前爲止的代碼。但是您可以在checkPrevNum()函數中看到它僅限於遍歷預定數組randomNums。我想要它,以便我可以傳遞任何我想要檢查的函數的數組。我對C/C++比較陌生。

int getNum(){ 
int numSelection = 0; 

do { 
numSelection = (rand() % 69) + 1; 
} while (checkPrevNum(numSelection) == true); 

return numSelection; 
} 

bool checkPrevNum(int prevNum){ 
for (int i = 0; i < 5; i++){ 
    if (prevNum == randomNums[i]){ 
     return true; 
    } 
} 
return false; 
} 
+1

如何你將它傳遞給不起作用的函數?你會得到什麼錯誤? –

回答

2

array<int, 6>是從發言權array<int, 7>鮮明的靜態類型,所以將需要一個模板化函數來處理或者直接:

template <typename T, size_t N> 
void check_duplicates(const std::array<T, N>& a) 
    ... 

或者,呼叫者可以將指針傳遞到所述第一元件和尺寸。如果你只需要支持一個元素類型:

void check_duplicates_2(const int*, size_t n) 
    ... 

// caller: 
check_duplicates_2(&yourNumbers[0], yourNumbers.size()); 

如果你想支持不同類型:

template <typename T> 
void check_duplicates_3(const T*, size_t n) 
    ... 

// caller: 
check_duplicates_3(&yourNumbers[0], yourNumbers.size()); 

如果check_duplicates功能的實現是特別長,而你叫它有許多不同的數組大小,你可能想要使用分層的方法來儘量減少代碼膨脹:

template <typename T, size_t N> 
void check_duplicates(const std::array<T, N>& a) 
    { return check_duplicates_3(&a[0], a.size()); }