std::转换产生奇怪的输出



今天我正在玩一些标准的库函数......并发现这个奇怪的输出来自std::transform((和std::back_inserter每当容器正在使用(在本例中为vector(有超过2个元素时。我不明白这种行为,那里的任何人都可以帮助我......

#include<iostream>  
#include<algorithm>  
#include<vector>  
using namespace std;  
/* this version of change works fine for me when i store the incoming value into a   
   static variable  
int change(int n){  
 static int m=n;
 return m * m;  
}*/  
int change(int n){  
return n*n;  
}  
int main(){  
 vector<int> v2(3,3),  
            v1;  
 transform(v2.begin(),v2.end(),back_inserter(v2),change);  
 for(auto v: v2)  
  {   
    cout << v <<"  ";  // prints out a strange random 5th value in v2.  
  }  
 return 0;  
}  

最可能的原因是,当您将元素push_backvector时,的存储被重新分配(这就是分配给back_insert_iterator的结果(。这会使传递给transformbeginend迭代器无效,后续赋值会导致未定义的行为。

如果您在呼叫transform之前reserve() vector有足够的空间,则可以解决您的问题

vector<int> v2(3,3);
v2.reserve(v2.size() * 2);
transform(v2.begin(),v2.end(),back_inserter(v2),change);

这将产生所需的输出。

3 3

3 9 9 9

现场演示

相关内容

  • 没有找到相关文章

最新更新