class Stats {
private:
int a = 0;
int b = 0;
int c = 0;
public:
Stats(int A = 0, int B = 0, int C = 0) : a(A), b(B), c(C) {}
};
int main()
{
int a = 0; int b = 0; int c = 0;
std::vector<Stats> example;
for (int b = 0; b < 10; b++)
{
a++;
b += 5;
c += 3;
example.emplace_back(a, b, c);
}
}
答案 0 :(得分:0)
正如各种评论所表明的那样,您的问题在各个方面都处于黑暗中,因此很难回答您的问题。我尝试使用以下假设和更改进行尝试:
更改:由于已将Stats成员变量声明为私有,因此无法从外部访问Stats成员变量。但是,很可能需要外部访问,因为您将需要操作员来比较Stats对象。我没有将成员变量声明为公共变量,而是使用前面的下划线将其重命名,并添加了公共(只读)吸气剂a()
,b()
,c()
。
假设:如果A的成员_a + _b + _c
的总和小于B的_a + _b + _c
的总和,则Stats对象A小于Stats对象B。如果这不符合您的需求,可以将其更改为您所需的任何内容。
更改:作为for循环一部分的变量声明“ b”隐藏了外部块的变量声明。此外,如注释中所述,for循环块中的语句b += 5
导致循环仅运行两次。因此,我将for循环变量b
重命名为x
。
通过上面的更改/假设,您可以简单地使用std::max_element
,方法是使用begin()和end()转发迭代器进行调用。在内部,模板函数使用<
运算符比较Stats对象。结果是一个迭代器。调用result - example.begin()
用于获取迭代器指向的元素的索引(从0开始)。在给定的示例中,返回9
,它是向量的最后一个元素的索引。
#include <algorithm>
#include <iostream>
#include <vector>
#include <cmath>
class Stats {
private:
int _a = 0;
int _b = 0;
int _c = 0;
public:
Stats(int A = 0, int B = 0, int C = 0) : _a(A), _b(B), _c(C) {
}
int a() const { return _a; }
int b() const { return _b; }
int c() const { return _c; }
};
bool operator< (const Stats& lhs, const Stats& rhs){
return lhs.a() + lhs.b() + lhs.c() < rhs.a() + rhs.b() + rhs.c();
}
int main()
{
int a = 0; int b = 0; int c = 0;
std::vector<Stats> example;
for (int x = 0; x < 10; x++)
{
a++;
b += 5;
c += 3;
example.emplace_back(Stats(a, b, c));
}
std::vector<Stats>::iterator result;
result = std::max_element(example.begin(), example.end());
std::cout << "max element at: " << result - example.begin() << '\n';
}