2010-03-29 55 views
2
#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

回答

12

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