C++ 为什么在查找数组中最大值的数目时出错

C++ 为什么在查找数组中最大值的数目时出错,c++,function,max,C++,Function,Max,我写了这样的函数 数组包含数字,函数应返回最大值的数目 int birthdayCakeCandles(vector<int> ar) { long arraySize = sizeof(ar) / sizeof(ar[0]); long maxHeight = ar[0]; long number = 0; long i; for (i = 0; i < arraySize; i++) { if (ar[i] >= maxHeight) {

我写了这样的函数 数组包含数字,函数应返回最大值的数目

int birthdayCakeCandles(vector<int> ar) {
  long arraySize = sizeof(ar) / sizeof(ar[0]);
  long maxHeight = ar[0];
  long number = 0;
  long i;

  for (i = 0; i < arraySize; i++) {
    if (ar[i] >= maxHeight) {
      maxHeight = ar[i];
    }
  }

  for (i = 0; i < arraySize; i++) {
    if (ar[i] == maxHeight) {
      number++;
    }
  }

  return number;
}
int生日蜡烛(向量ar){
long arraySize=sizeof(ar)/sizeof(ar[0]);
长最大高度=ar[0];
长数=0;
龙我;
对于(i=0;i=最大高度){
最大高度=ar[i];
}
}
对于(i=0;i
这行代码:

long arraySize = sizeof(ar)/sizeof(ar[0]);
不是做你想做的事
sizeof
返回对象的大小,而不是容器中的元素数

相反,您可以简单地执行以下操作:

auto arraySize = ar.size();
因为
vector
知道它自己的大小,您可以查询它


此外,还有一些算法可以实现您想要的功能,而不是编写原始循环

auto maxHeight = *std::max_element(ar.begin(), ar.end());
auto number = std::count(ar.begin(), ar.end(), maxHeight);

你得到了什么错误?这个问题来自黑客等级,有些测试用例是正确的,有些是错误的。在10个测试用例中,只有3个是正确的,我不知道为什么会发生这种情况,我对编程
sizeof(ar)/sizeof(ar[0])
技巧不起作用,如果
ar
std::vector
。这个技巧只适用于C样式数组——不是指针,而不是C++容器。标准库中有很多算法可以帮助你。例如@IshwarJoshi hackerrank和其他类似的网站不是学习编程语言的好起点。即使您对该语言了解很多,也很难将其视为一个学习平台。
ar.size()
返回一个无符号整数类型,即
std::vector::size\u type
,这是(通常,但标准不保证)
std::size\t
long
不能(必然)表示返回的值。在C++11及更高版本中,还可以通过执行
auto-arraySize=ar.size(),让编译器计算出正确的类型@Peter好点,编辑答案,谢谢。(我假设OP至少可以访问c++11)。