以下代码中的错误是什么?

问题描述:

#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, " ")); 
} 

运行时,这给出了令人毛骨悚然的分段错误。请告诉我哪里出错了。以下代码中的错误是什么?

+2

尝试调试? – Tom 2010-03-29 13:13:49

+1

@Tom:对不起,我是C++新手;我需要一段时间才能熟悉STL中的所有边界案例。 – Johannes 2010-03-29 13:23:17

+2

什么是'令人毛骨悚然的分段故障'? – KevinDTimm 2010-03-29 13:35:07

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