如何在C ++中使用is_sorted函数检查数组是否已排序?

时间:2016-03-14 13:48:36

标签: c++ arrays sorting arraylist

我需要使用std::is_sorted()函数检查数组是否已排序。我不确定如何使用begin()end(),所以我只是将数组传递给函数。

void sorted(bool value){
    if(value)
        cout << "Array is sorted" << endl;
    else
        cout << "Array is not sorted" << endl;
}

int main(){
    int a[10], i;
    cout << "Enter the sequence" << endl;
    for(i=0; i<5; i++){
        cin >> a[i];
    }
    bool value = is_sorted(a);
    sorted(value);
    return 0;
}

当我这样做时,虽然我收到了像

这样的错误
  

没有匹配的is_sorted函数调用

1 个答案:

答案 0 :(得分:2)

std::is_sorted适用于一系列不在&#34;容器&#34;上的迭代器。要使用它,您需要将迭代器传递到要检查的范围的开头,并将一个迭代器传递到要检查的范围的结尾。大多数(如果不是所有)标准容器都有begin()end()成员,这非常方便但不幸的是原始数组没有。

幸运的是,虽然我们有std::beginstd::end将返回一个迭代器并且将使用原始数组(如果数组被传递给类似void foo(int arr[])的函数,这将不起作用衰减到指针并且不是函数中的数组。)

因此,如果您想将std::is_sorted与原始数组一起使用,则可以使用

std::is_sorted(std::being(array_name), std::end(array_name));

将检查整个阵列。

此外,您还可以使用指针表示法,因为迭代器是

的抽象
std::is_sorted(array_name + x, array_name + y)

x的范围[0, array_size - 1]y范围为[x + 1, array_size]