不能在c ++中使用begin()表示数组

时间:2017-06-15 05:24:59

标签: c++

我正在使用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])'

4 个答案:

答案 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);