我用A
對象填充了一個向量,然後將這些對象地址存儲在multimap
[1]中,但是打印消息顯示存儲在向量中的對象的引用改變了[2 ]。你明白爲什麼?以及如何避免任何改變。我的對象在向量中的地址變化
//[1]
vector<A> vec;
multimap<const A*, const double > mymultimap;
for (const auto &a : A) {
double val = a.value();
vec.push_back(a);
mymultimap.insert(std::pair<const A*, const double >(&vel.back(), val));
// displaying addresses while storing them
cout<<"test1: "<<&vec.back()<<endl;
}
//[2]
// displaying addresses after storing them
for(auto &i : vec)
cout << "test2: " << &i <<endl;
結果:
test1: 0x7f6a13ab4000
test1: 0x7f6a140137c8
test2 :0x7f6a14013000
test2 :0x7f6a140137c8
請添加正確的代碼。 – SergeyA
'(const auto&a:A){' - 那是什麼? – SergeyA
你爲什麼要存放地址?有向量中元素的引用永遠有效(例如'vec [i]'爲第i個元素) – user463035818