将数组作为函数参数传递,并在其上调用begin / end方法

时间:2018-02-09 22:48:52

标签: c++

#include <iostream>

using namespace std;

int vowels[] = {65, 69, 73, 79, 85, 97, 101, 105, 111, 117}; // ASCII codes (upper & lower case).

bool characterInArray(char letter, int arr[]) {
  return find(begin(arr), end(arr), (int) letter) != end(arr);
}

int main() {
  if (characterInArray('i', vowels)) {
    cout << "Found a vowel in the character provided." << endl;
  }
  return 0;
}

鉴于此代码,我收到错误“错误:没有匹配函数来调用”begin“。完整的错误信息如下,我在这里做错了什么?

candidate template ignored: could not match 'initializer_list<type-parameter-0-0>' against 'int *'

1 个答案:

答案 0 :(得分:3)

在C ++中,像int arr[]这样的函数参数被调整int* arr,这就是begin()end()不起作用的原因。您可以通过传递对数组const int (&arr)[10]的引用来解决此问题,但删除该函数可能更简单,只需使用正确的谓词调用any_of

if (any_of(begin(vowels), end(vowels),
    [](char c) { return c == 'i'; }) { ... }