我尝试了很多事情,但是仍然出现错误:
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;
}
答案 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
进行反向打印。(如果您只想这样做)
#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;
}