【问题标题】:How to check whether an array is sorted or not using is_sorted function in C++?如何使用 C++ 中的 is_sorted 函数检查数组是否已排序?
【发布时间】:2016-06-29 14:18:39
【问题描述】:

我需要使用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 函数没有匹配的调用

【问题讨论】:

  • 错误表明没有匹配的 is_sorted 函数调用。
  • bool value = std::is_sorted(a, a + 5); 别忘了#include &lt;algorithm&gt;。哦,你的意思是声明一个包含 10 个元素的数组,然后只填充其中的 5 个?
  • 取一个副本,对副本排序,将副本与原件进行比较-> set bool
  • @FirstStep - 即使您必须自己实现此算法,也没有理由复制向量。您所要做的就是查看每一对连续的元素。如果其中任何一个不按顺序排列,则向量未排序。
  • is_sorted 默认检查是否按升序排序(准确地说,相对于std::less 谓词排序)。如果你想检查降序排序,你可以做is_sorted(a, a+5, std::greater&lt;int&gt;())

标签: c++ arrays sorting arraylist


【解决方案1】:

std::is_sorted 在一系列迭代器上工作,而不是在“容器”上。要使用它,您需要将迭代器传递到您要检查的范围的开头和要检查的范围的末尾。大多数(如果不是全部)标准容器都有 begin()end() 成员,这非常方便,但不幸的是原始数组没有。

幸运的是,尽管我们有 std::beginstd::end,它们将返回一个迭代器并可以使用原始数组(如果数组被传递给像 void foo(int arr[]) 这样的函数,这将不起作用,因为它会衰减到一个指针并且是不是函数中的数组)。

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

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

这将检查整个数组。

此外,您还可以使用指针表示法,因为这是迭代器对 like 的抽象

std::is_sorted(array_name + x, array_name + y)

其中x[0, array_size - 1] 的范围内,y[x + 1, array_size] 的范围内

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 2022-06-10
    • 2013-08-09
    • 2022-01-02
    • 2018-04-10
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    相关资源
    最近更新 更多