gpt4 book ai didi

c++ - 如何返回 vector 的最后三个值?

转载 作者:行者123 更新时间:2023-11-30 02:11:18 25 4
gpt4 key购买 nike

我想将 vector v_2 的最后三个值放在三个变量中(每个变量一个值)。有没有更快或更简单的方法来做到这一点?

struct Desempenho {
double maximo;
};

double ultimo, penultimo, antepenultimo;
Desempenho d;
int n (0);
vector<Desempenho> v_2;
d.maximo=1.1;
v_2.push_back(d);
d.maximo=2.2;
v_2.push_back(d);
d.maximo=3.3;
v_2.push_back(d);
d.maximo=4.4;
v_2.push_back(d);
d.maximo=5.5;
v_2.push_back(d);

for (vector<Desempenho>::const_reverse_iterator rit = v_2.rbegin(); rit != v_2.rend(); ++rit) {
cout << "XXXX " << n << endl;
if (n==0) ultimo = rit->maximo;
else if (n==1) penultimo = rit->maximo;
else if (n==2) antepenultimo = rit->maximo;
else break;
++n;
}

cout << ultimo << " " << penultimo << " " << antepenultimo < < endl;

最佳答案

嗯,你不需要循环来使用迭代器:

vector<Desempenho>::const_reverse_iterator rit = v_2.rbegin();
if (rit != v_2.rend()) {
ultimo = rit->maximo;
if (++rit != v_2.rend()) {
penultimo = rit->maximo;
if (++rit != v_2.rend()) antepenultimo = rit->maximo;
}
}

如果你想要不必要的华而不实:

size_t len = v_2.size();
switch(len) {
default:
antepenultimo = v_2[len-3].maximo;
case 2:
penultimo = v_2[len-2].maximo;
case 1:
ultimo = v_2[len-1].maximo;
case 0:
break;
}

但是您的代码审查员朝您的头扔圆珠笔。更明智的做法是,一次错误检查可能会:

size_t len = v_2.size();
if (len >= 3) {
ultimo = v_2[len-1].maximo;
penultimo = v_2[len-2].maximo;
antepenultimo = v_2[len-3].maximo;
}

关于c++ - 如何返回 vector 的最后三个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3654828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com