Этот вопрос является расширением Этот вопрос Я задал.
У меня есть std :: vector vec_B
. Который хранит экземпляры класса Foo
. Порядок элементов в этом векторе изменяется в коде.
Теперь я хочу получить доступ к значению текущего «последнего элемента» или текущего «n-го» элемента вектора. Если я использую приведенный ниже код для получения последнего элемента с использованием метода getLastFoo()
, он не возвращает правильное значение.
Например, для начала последний элемент вектора имеет Foo.getNumber() = 9
. После сортировки в порядке убывания num
, для последнего элемента, Foo.getNumber() = 0
.
Но с кодом, приведенным ниже, он по-прежнему возвращает 9 ... это означает, что он все еще указывает на исходный элемент, который был последним элементом.
Какое изменение я должен внести в приведенный ниже код, чтобы "lastFoo
" указывал на правильный последний элемент?
class Foo {
public:
Foo(int i);
~Foo(){};
int getNum();
private:
int num;
};
Foo:Foo(int i){
num = i;
}
int Foo::getNum(){
return num;
}
class B {
public:
Foo* getLastFoo();
B();
~B(){};
private:
vector<Foo> vec_B;
};
B::B(){
int i;
for (i = 0; i< 10; i++){
vec_B.push_back(Foo(i));
}
// Do some random changes to the vector vec_B so that elements are reordered. For
// example rearrange elements in decreasing order of 'num'
//...
}
Foo* B::getLastFoo(){
return &vec_B.back();
};
int main(){
B b;
Foo* lastFoo;
lastFoo = b.getLastFoo()
cout<<lastFoo->getNumber();
return 0;
}