以下代码中的错误是什么?
问题描述:
#include <iostream>
#include <algorithm>
#include <vector>
#include <boost/array.hpp>
#include <boost/bind.hpp>
int main() {
boost::array<int, 4> a = {45, 11, 67, 23};
std::vector<int> v(a.begin(), a.end());
std::vector<int> v2;
std::transform(v.begin(), v.end(), v2.begin(),
boost::bind(std::multiplies<int>(), _1, 2));
std::copy(v2.begin(), v2.end(), std::ostream_iterator<int>(std::cout, " "));
}
运行时,这给出了令人毛骨悚然的分段错误。请告诉我哪里出错了。以下代码中的错误是什么?
答
v2
当您拨打transform
时,尺寸为零。你要么需要调整v2
,使其至少有一样多的元素v
调用transform
前:
v2.resize(v.size());
,或者你可以在调用transform
使用std::back_inserter
:
std::transform(v.begin(), v.end(), std::back_inserter(v2), boost::bind(std::multiplies<int>(), _1, 2));
+0
最好的可能是'v2.reserve(v.size())'在变换之前。 – GManNickG 2010-03-29 14:06:32
尝试调试? – Tom 2010-03-29 13:13:49
@Tom:对不起,我是C++新手;我需要一段时间才能熟悉STL中的所有边界案例。 – Johannes 2010-03-29 13:23:17
什么是'令人毛骨悚然的分段故障'? – KevinDTimm 2010-03-29 13:35:07