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日

悬赏问题

  • ¥15 像这种代码要怎么跑起来?
  • ¥15 怎么改成循环输入删除(语言-c语言)
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理
  • ¥15 STM32无法向设备写入固件