用于查找数组中最大元素的出现次数的代码,给出分段错误



我正在用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;
}

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

给定代码

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

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

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

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的索引似乎毫无意义。

使用vector 时,我们必须使用push_backemplace_back添加元素。为了遍历向量,请使用向量迭代器来实现由于越界访问而导致的异常安全。

for (vector<int>::iterator it = a.begin() ; it != a.end(); ++it)
{
//your implementation goes here.
cout << *it << endl; //access each element like this
}

另请注意,a.end(( 实际上是last_element + 1

vector<int> a;for(double i=0;i<n;++i)cin>>a[i];这不是在向量使用a.push_back(i(中输入的方式;相反; 并使用 auto 遍历直到 a.begin(( 直到 a.end((

最新更新