基于范围的for循环,出现需要“begin”函数的问题

修复基于范围的for循环begin函数缺失问题
本文探讨了在C++中遇到基于范围的for循环需要`begin`函数时的错误,解释了该循环的适用条件,包括对象范围的确定性和迭代器操作符的实现。通过将原始的动态数组替换为`std::vector`,解决了问题,避免了内存泄漏,并成功使用了基于范围的for循环。

  程序为:求最大子数组和

 int n, sum=0;
    cout << "please enter the num of array" << endl;
    cin >> n;
    int *a = new int[n];
    for (int i = 0; i < n; i++)
    {   
        cout << "输入a[" << i << "]" << endl;
        cin >> a[i];
        sum += a[i];
    }

逐个输出
    for (int &e : a){

cout<<e<<" ";

}
    cout << "sum = " << sum << endl;
    delete[] a;
    return 0

 

编译会出现错误:此基于范围的for循环需要适合“begin”函数,但未找到

 

参考原因:

能够使用基于范围的for循环的条件:

首先,对象的范围必须可确定。对于类来说,需要有begin和end函数,范围就是begin和end之间;对于数组来说,范围就是数组的第一个和最后一个元素。
其次,还要求迭代的对象实现++和==等操作符。STL中的容器都能支持,而自己实现的类,则需要实现这些操作符。
--------------------- 
作者:WizardtoH 
来源:优快云 
原文:https://blog.youkuaiyun.com/WizardtoH/article/details/80990801 
版权声明:本文为博主原创文章,转载请附上博文链接!

未解决,对代码进行修改,采用Vector,相比于前一种方法,可避免因忘记delete而造成内存泄漏,且可使用基于范围的for循环

    int n, sum=0;
    cout << "please enter the num of array" << endl;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++)
    {   
        cout << "输入a[" << i << "]" << endl;
        cin >> a[i];
        sum += a[i];
    }
    for (int &e : a)
    {
        cout <<e<<" ";
    }
    cout << "sum = " << sum << endl;
    return 0;

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值