【发布时间】:2010-08-28 04:28:58
【问题描述】:
这个问题是我问的this question 的延伸。
我有一个 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;
}
【问题讨论】:
-
我怀疑您省略的“做一些随机更改”部分可能存在问题。也许你可以把它贴出来?
-
抱歉我的错误,我在原始代码中打印值的方式有一个错误。所以这不是问题。将删除问题。非常感谢您的回答!!!