小编cab*_*abe的帖子

矢量中对象的地址发生了变化

我用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;
Run Code Online (Sandbox Code Playgroud)

结果:

test1: 0x7f6a13ab4000  
test1: 0x7f6a140137c8  
test2 :0x7f6a14013000  
test2 :0x7f6a140137c8  
Run Code Online (Sandbox Code Playgroud)

c++ c++11

2
推荐指数
1
解决办法
1358
查看次数

标签 统计

c++ ×1

c++11 ×1