没有匹配的函数可以调用“ begin(int [n])”

时间:2018-08-01 16:26:26

标签: c++ arrays reverse

我尝试了很多事情,但是仍然出现错误:

no matching function for call to ‘begin(int [n])’

什么是最好的方法?

#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main() 
{
    int n;
    cin >> n;
    int arr[n];
    for(int i = 0; i < n; i++){
        cin >> arr[i];
    }
    reverse(begin(arr), end(arr));
    for(int j = 0; j < n; j++){
        cout << arr[j] <<" ";
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

  

错误:没有匹配的函数可以调用“ begin(int [n])”

这是因为您使用了非标准 Variable Length Array,在这里:

cin >> n;
int arr[n] ;

因此,不可能将std::reverse之类的标准算法应用于这种非标准数组。

如果您更改其常规数组的大小,例如:

const int n = 3;
int arr[n] ;

您编写的代码有效并且可以使用。 See here

但是,现在您无法输入数组的大小。


  

什么是最好的方法?

改为使用std::vector

现在,您还可以选择不使用std::reverse而是使用std::vector::reverse_iterator进行反向打印。(如果您只想这样做)

例如:See output here

#include <vector>
#include <iostream>
#include <algorithm>

int main() 
{
   int n;
   std::cin >> n;
   std::vector<int> arr(n);
   for(int& ele: arr) std::cin >> ele;
   //std::reverse(std::begin(arr), std::end(arr));
   //for(const int ele: arr) std::cout << ele << " ";
   //or simply
   std::for_each(arr.rbegin(), arr.rend(),[](const int ele){ std::cout << ele << " "; });
   return 0;
}