首页 > 解决方案 > 用于查找给出分割错误的数组中最大元素的出现次数的代码

问题描述

我正在用 C++ 编写一个函数,它将向量数组作为参数,然后找到其中最大值的出现次数。我已经编写了函数生日蛋糕蜡烛和主要函数如下。

#include <iostream>
using namespace std;
int birthdaycakecandles(vector<int> a)
{
    int largest=a[0];
    int pos;
    for(int i=1;i<a.size();++i)
    {
        if(largest<a[i])
        {
            largest=a[i];
            pos=i;
        }
    }
    int count=1;
    for(int i=0;i<a.size();++i)
    {
        if(a[i]==largest&&i!=pos)
        count++;
    }
    return count;
}
int main()
{
    double n;
    cin>>n;
    vector<int> a;
    for(double i=0;i<n;++i)
    cin>>a[i];
    int val=birthdaycakecandles(a);
    cout<<val;
    return 0;
}

请查看代码并建议我错误的原因。编译器给我分段错误。谢谢。

标签: c++functionc++11vector

解决方案


给定代码

vector<int> a;
for(double i=0;i<n;++i)
    cin>>a[i];

a是空的; 访问不存在的元素a[i]会导致 UB,一切皆有可能。

您可以从头开始初始化a包含的n元素。

size_t n;
cin>>n;
vector<int> a(n);
for(size_t i=0;i<n;++i)
    cin>>a[i];

或用于push_back将元素插入a.

size_t n;
cin>>n;
vector<int> a;
for(size_t i=0;i<n;++i) {
    int x;
    cin>>x;
    a.push_back(x);
}

PS:double用作索引vector似乎没有意义。


推荐阅读