2017-04-04 77 views
3

所以我已經閱讀了其他的Stack帖子,他們都建議我使用find。我試圖這樣做,但它對我不起作用。C++在數組中找到一個int

bool findInArray(int number, int array[]){ 
    // Finds if the number is in the array 
    bool exists = find(begin(array), end(array), number) != end(array); 
    return exists; 

}

但我不斷收到以下錯誤:

error: no matching function for call to ‘begin(int*&)’ 

它甚至接受的答案在這裏:How can I check if given int exists in array?

+0

爲什麼你傳遞一個數組指針,而不是一個數組作爲參數,以「findInArray」? – Meccano

+0

因爲在你的函數中你沒有數組,所以你有一個*指針*。 –

+0

我不知道我爲什麼離開那裏。我一直在嘗試各種各樣的事情,但我錯過了。我編輯了它實際上的樣子。 –

回答

8

你需要一個模板:

template <std::size_t N> 
bool findInArray(int number, const int (&array)[N]) { 
    // Finds if the number is in the array 
    return std::find(std::begin(array), std::end(array), number) != std::end(array); 
} 

您還需要通過左值傳遞數組,因爲您無法在C++中通過prvalue傳遞數組,而是數組會衰減爲指向其第一個元素的指針,從而失去大小信息。

+0

[Demo](http://ideone.com/OptAtP) –

+0

謝謝。這似乎是答案,但我還不熟悉模板。我會閱讀這些。 –

0

如果您不知道模板並尋找此問題的其他答案,請使用STL算法。

#include<iostream> 
#include<algorithm> 

bool findInArray(int number, int array[], int size_array){ 
    int* p = std::find(array, array+size_array, number); 
    if (p != array+size_array) { 
    return 1; 
    } else { 
    return 0; 
} 

並從主,您可以撥打:

findInArray(5, a, sizeof(a)/sizeof(a[0]));