确保目标区间足够大
看个例子:
我们使用transform函数给一个容器承载计算结果:
vector<int> src; //待计算的数据
vector<int> res; //计算结果
src.push_back(0);
src.push_back(1);
src.push_back(2);
src.push_back(3);
std::transform(src.begin(), src.end(), res.begin(), [](int value) {return value*value; });
for (auto value : res)
{
cout << "res:" << value << endl;
}
运行发现直接崩溃,原因就是容器res没有足够的空间承载这些数据。知道了原因,解决就很简单了,我们resize一次空间即可:
res.resize(res.size() + src.size());
在这里我们还可以使用另一种方法就是 inserter,例如back_inserter它会调用容器的push_back(vector、string、deque和list)方法增加值,或者front_inserter调用push_front(deque和list)。
std::transform(src.begin(), src.end(), back_inserter(res), [](int value) {return value*value; });
这个使用起来很简单,也很方便。