以下代码有什么区别或错误?

时间:2019-04-22 17:36:37

标签: c++ arrays stl min

我必须找到一个数组的最小值。首先,我使用stl,然后使用简单的方法,但是如果使用stl,我的代码将被拒绝。这是错的吗?问题可以在这里找到: https://www.codechef.com/problems/CFMM

我在同一位在线裁判上执行了这两个代码,但是一个STL被拒绝了。

int a_min = ar[0];
for(int i=1;i<6;i++)
            if(ar[i]<a_min)
                a_min = ar[i];
        cout<<a_min<<endl;

STL一:

int *a_min = min_element(ar,ar+5);
        cout<<*a_min<<endl;

完整代码在这里:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int t, n, a_min;
    string str;
    cin>>t;
    char check[6] = {'c','o','d','e','h','f'};
    while(t--){
        int ar[6] = {0};
        cin>>n;
        while(n--){
            cin>>str;
            for(int i=0;i<str.size();i++){
                for(int j=0;j<6;j++)
                    if(str[i] == check[j])
                        if(str[i] == check[j])
                            ar[j]++;
            }
        }
        ar[0] /= 2;
        ar[3] /= 2;
        a_min = ar[0];
        for(int i=1;i<6;i++)   //min code from here
            if(ar[i]<a_min)
                a_min = ar[i];
        cout<<a_min<<endl;    //cout<<*a_min<<endl; for stl one
    }
}

1 个答案:

答案 0 :(得分:0)

您正在使用:

int *a_min = min_element(ar,ar+5);

您需要将其更改为:

int *a_min = min_element(ar,ar+6);

,以便检查ar的6个元素。 似乎逻辑上认为您需要将数组的最后一个元素的指针作为min_element的第二个参数,但格式为min_element(first,last),其中从第一个迭代器迭代到最后一个排除迭代器。