2017-04-04 86 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]));