gpt4 book ai didi

c++ - std::transform 产生奇怪的输出

转载 作者:行者123 更新时间:2023-11-28 02:43:50 24 4
gpt4 key购买 nike

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

#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_back 元素放入其中时,vector 的存储被重新分配(这就是分配给 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

Live demo

关于c++ - std::transform 产生奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25071145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com