weixin_43306709 2022-02-12 20:11 采纳率: 77.3%
浏览 16
已结题

想通过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;
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • _GX_ 2022-02-12 20:32
    关注

    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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 2月20日
  • 已采纳回答 2月12日
  • 创建了问题 2月12日

悬赏问题

  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择
  • ¥15 部分网页页面无法显示!
  • ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?
  • ¥15 QTOF MSE数据分析
  • ¥15 平板录音机录音问题解决
  • ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?