#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