C++ 如何返回向量的最后三个值?
我想把vectorv_2的最后三个值放在三个变量中(每个变量一个值)。 有没有更快或更简单的方法C++ 如何返回向量的最后三个值?,c++,C++,我想把vectorv_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_b
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;
struct Desempenho{
双极大值;
};
双末日、前末日、前末日;
脱温;
int n(0);
向量v_2;
d、 最大值=1.1;
v_2.向后推(d);
d、 最大值=2.2;
v_2.向后推(d);
d、 最大值=3.3;
v_2.向后推(d);
d、 最大值=4.4;
v_2.向后推(d);
d、 最大值=5.5;
v_2.向后推(d);
对于(vector::const_reverse_iterator rit=v_2.rbegin();rit!=v_2.rend();++rit){
库特马克西莫;
否则就断了;
++n;
}
cout嗯,使用迭代器不需要循环:
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();
if (len >= 3) {
ultimo = v_2[len-1].maximo;
penultimo = v_2[len-2].maximo;
antepenultimo = v_2[len-3].maximo;
}
使用迭代器不需要循环:
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();
if (len >= 3) {
ultimo = v_2[len-1].maximo;
penultimo = v_2[len-2].maximo;
antepenultimo = v_2[len-3].maximo;
}
您可以通过size()方法获取大小,然后使用类似的方法输出
cout << v_2.at(size-1) << v_2.at(size-2) << v_2.at(size-3)
cout您可以通过size()方法获得大小,然后用类似的方法输出
cout << v_2.at(size-1) << v_2.at(size-2) << v_2.at(size-3)
cout想到的最简单的方法是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];
想到的最简单的方法是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];
如果向量太小,则会引发异常,而原始代码会打印默认的初始化对象。或者在本例中,一个未初始化的对象,但我假设这是一个意外:-)是的,但这可以很简单地克服。如果向量太小,则会引发异常,而原始代码会打印默认的初始化对象。或者在这个例子中,一个未初始化的对象,但我假设这是一个意外:-)是的,但这可以很简单地克服。非常有趣。如果你有,比如说,100个不同的变量,这将是一个很好的技巧。非常有趣。如果你有,比如说,100个不同的变量,这将是一个很好的技巧。