C++ 如何返回向量的最后三个值?

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

我想把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_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个不同的变量,这将是一个很好的技巧。