c++ - C++ 查找数组中最大元素的索引,即使有多个最大元素
问题描述
我找到了一种方法来搜索数组中最大元素的索引。但是,当数组具有多个具有相同最大值的元素时,它就不能正常工作。我用来查找索引的方法是 with std::max_element()
,但这可能不是解决方案。
#include <iostream>
using namespace std;
int main()
{
int age[8];
int num = sizeof(age) / sizeof(int);
cout << "Type the age from 8 employees\n";
for (int i = 0; i < 8; i++)
{
cout << "Age " << i+1 << ": ";
cin >> age[i];
}
cout << "______________________________________________________" << endl;
cout << "\nOlder age found in position: " << max_element(age, age + num + 1) - age;
我希望我能解决这个问题,int array[]
因为我几天前开始编程,但如果我必须使用另一种类型的数组,请告诉我,这样我就可以去了解它。
解决方案
您的程序的问题是 的第二个参数max_element()
,它应该是指向传递最后一个元素的指针。它应该是age + 8
或&age[8]
, 8 是数组的大小。根据需要,两者都是传递数组最后一个元素的地址。在 C++ 中,last
或者end
是传递最后一个值。
这是一个如何使用max_element()
指针的简化示例。为了使它更简单,我用值初始化了几个数组,而不是像你正在做的那样从标准输入中读取它们:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int age_uniq[8] = {67, 34, 22, 54, 78, 49, 4, 9};
int age_rep[8] = {79, 34, 22, 54, 78, 49, 79, 9};
int* oldest = max_element(age_uniq, age_uniq+8);
cout << "oldest: " << *oldest << ", index = " << oldest - age_uniq << "\n";
oldest = max_element(age_rep, age_rep+8);
cout << "oldest: " << *oldest << ", index = " << oldest - age_rep << "\n";
}
此代码按预期工作,当它有多个最大值时,它返回第一个。
首先要注意的是它max_element()
返回一个前向迭代器,在这种情况下是一个整数指针,因为这是你传递给它的。
您需要学习的第二件事是指针算术。当您减去两个相同类型的指针时,在这种情况下是指向 int 的指针,它已经考虑了整数的大小,并给出了指针之间的距离。因此,oldest - age
为您提供最旧的索引。
此外,还sizeof(age)
为您提供指针的大小(以字节为单位),这取决于您运行程序的系统可能是 32、64 或其他值。它不是您的数组的大小,在本例中为 8。同样,sizeof(int)
它为您提供一个 int 的大小,这取决于您运行程序的系统。
推荐阅读
- c++ - 具有相对路径的 CMake 安装目标
- c++ - C++:在多个文件中定义类
- python - 继承中带/不带下划线的python变量
- vbscript - crt.Dialog.FileOpenDialog([title, [buttonLabel, [defaultFilename, [filter ]]]])
- html - 当浏览器不是全屏时,单击此处按钮上的定位关闭
- git - git 分支工作流策略
- java - 带有对象键的 HashMap
- oauth - 身份服务器 4 中的授权流程:不支持的授予类型
- c++ - 有没有办法让一组未初始化的类在调用 delete[] 时不会被破坏?
- ruby - 带有传统知识支持的红宝石