2016-03-14 24 views
-3

我需要檢查數組是否使用std::is_sorted()函數排序。我不知道如何使用begin()end(),所以我只是將數組傳遞給函數。如何在C++中使用is_sorted函數檢查數組是否被排序?

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; 
} 

當我這樣做,雖然我得到這樣

錯誤沒有匹配的呼籲已排序功能

+0

誤差範圍指出,沒有匹配的調用is_sorted函數。 –

+3

'bool value = std :: is_sorted(a,a + 5);'別忘了'#include '。哦,你是不是真的想要聲明一個包含10個元素的數組,然後只填寫其中的5個? –

+0

獲取副本,對副本進行排序,與原始副本進行比較 - > set bool –

回答

2

std::is_sorted作品在一系列的迭代器不是一個「容器」 。要使用它,您需要將迭代器傳遞到要檢查的範圍的起始位置,並將一個迭代器傳遞到要檢查的範圍的末尾。大多數(如果不是全部)標準容器都有一個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]