想通过is_sorted模板函数实现看数组是不是有序,为什么这个i是4的时候循环直接跳转到else语句了,然后就输出了false,但这个是有序的啊!

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

#include <iostream>

using namespace std;

template<typename T>
bool is_sorted(T a[],int n);

int main()
{
    bool a1,a2;
    int arr1[5] = {1,2,3,4,5};
    a1 = is_sorted(arr1,5);
    cout << a1 << endl;

    // int arr2[5] = {2,3,4,1,5};
    // a2 = is_sorted(arr2,5);
    // cout << a2 << endl;

}
template<typename T>
bool is_sorted(T a[],int n)
{
    bool c;
    for(int i = 0;i < n;i++)
    {
        
        if(a[i] <= a[i+1])
            c = true;
        else
        {            //如何实现执行到这条语句之后跳出整个for循环
            c = false;
            break;
        }      
    }
    return c;
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

for(int i = 0;i < n;i++)改为for(int i = 0;i < n - 1;i++)
因为如果i=4, 那么i+1=5,就越界访问数组了。

帮你把程序修改了一下

#include <iostream>

using namespace std;

template <typename T, int N>
bool is_ascending_order(const T (&a)[N])
{
    bool r = true;
    for (int i = 0; i < N - 1; i++)
    {
        if (a[i] > a[i + 1])
        {
            r = false;
            break;
        }
    }
    return r;
}

template <typename T, int N>
bool is_descending_order(const T (&a)[N])
{
    bool r = true;
    for (int i = 0; i < N - 1; i++)
    {
        if (a[i] < a[i + 1])
        {
            r = false;
            break;
        }
    }
    return r;
}

template <typename T, int N>
bool is_sorted(const T (&a)[N])
{
    return is_ascending_order(a) || is_descending_order(a);
}

int main()
{
    int a[5] = {1, 2, 3, 4, 5};
    int b[5] = {5, 4, 3, 2, 1};
    int c[5] = {2, 3, 4, 1, 5};
    cout << boolalpha << is_sorted(a) << ' ' << is_sorted(b) << ' ' << is_sorted(c) << endl;
    return 0;
}
$ g++ -Wall main.cpp
$ ./a.out
true true false