我想将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;
答案 0 :(得分:2)
好吧,你不需要循环来使用迭代器:
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;
}
但是您的代码审核者会向您投掷一个biro。更明智的是,单个错误检查可能会:
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;
}
答案 1 :(得分:1)
您可以通过size()方法获取大小,然后输出类似的内容。
cout << v_2.at(size-1) << v_2.at(size-2) << v_2.at(size-3)
如果size是size()方法的结果。
答案 2 :(得分:1)
最简单的想法是3个任务。但是,你可以做一些像这样的时髦的事情:
int ultimo = 0, penultimo = 0, antepenultimo = 0;
int* ptr[3] = {&ultimo, &penultimo, &antepenultimo};
for (int i = 2; i >= 0; i--)
if (v_2.size() - i >= 0)
*ptr[i] = v_2[i];