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

时间:2010-09-06 23:28:04

标签: c++

我想将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;

3 个答案:

答案 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];