把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