我正在使用g ++ 7.1.0,但是使用带数组的begin()作为参数会引发错误。我的代码是
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i = 0; i < n; i++) {
cin>>a[i];
}
sort(begin(a), end(a));
return 0;
}
它说
no matching function for call to 'begin(int [n])'
答案 0 :(得分:2)
#include <iterator>
<algorithm>
是begin()
,end()
的{{3}},以及所有迭代函数。
此外,要使迭代函数起作用,必须使用编译时常量来调整数组的大小,因此,int a[10];
可以正常工作,但int a[n];
不起作用。
答案 1 :(得分:2)
int a[n];
是C ++中的无效语句。 C ++不允许变长数组。自C99标准以来仅允许在C中使用。如果需要动态数组,则应该在C ++中99%的时间内使用std::vector。
你可以这样做:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
int main() {
std::cout<<"Enter size of array\n";
int size;
std::cin>>size;
std::vector<int> v(size);
std::cout<<"Enter "<<size<< " elements\n";
for(size_t i=0;i<v.size();++i)
std::cin>>v[i];
std::sort(v.begin(),v.end());
std::cout<<"Sorted elements are: \n";
for(const auto& i : v)
std::cout<<i<<' ';
}
查看实时演示here。
答案 2 :(得分:0)
你可以这样做: -
#include <algorithm>
int main(){
int arr[2000];
int n = sizeof(arr)/sizeof(arr[0]);
std::sort(arr, arr+n);
}
答案 3 :(得分:0)
如果您使用的是数组而不是矢量,请使用
sort(a,a+n);