2015-06-25 73 views
0

我知道從第一個陣列演員。如何在向量C++中將double轉換爲int?

std::vector<int> v_int; 
std::vector<float> v_float(v_int.begin(), v_int.end()); 

但我該如何轉換第二個數組?

vector<int> aCol(4); 
vector<vector<int>> a(2, aCol); 
vector<vector<double>> b(a.begin(), a.end());// ??? 

在這種情況下該怎麼辦?

+1

構建的載體要複製'性病的內容:: vector的'來a'std ::矢量'? – Alejandro

+1

你想'std :: vector v_int(v_float.begin(),v_float.end());'?你遇到什麼問題? – songyuanyao

+0

vector aCol(4); vector < vector> a(2,aCol); vector > b(a.begin(),a.end()); ?????????????? –

回答

1

對於編譯器vector<int>vector<double>是完全無關的類型,不能從一個到另一個隱式轉換。你可以做的是一樣的東西:

for(auto&& elem: a) 
    b.push_back(std::vector<double>(elem.begin(), elem.end())); 
1
vector<vector<double>> b; 
b.reserve(a.size()); 
for (const auto& elem : a) { 
    b.emplace_back(elem.begin(), elem.end()); 
} 
0

您的矢量的矢量結構不編譯的原因是因爲

vector<vector<double>> b(a.begin(), a.end()) 

是範圍構建b迭代器,其元素類型是vector<int> 。這將試圖構建b的內部std::vector<double> s,其中std::vector<int> s,這是不應該編譯的意外。

這相較於您的第一示例,

std::vector<float> v_float(v_int.begin(), v_int.end()); 

是範圍從迭代器,其元素類型是int構建v_float。這是可行的,因爲從int到float的轉換是允許的,但不是從std::vector<int>std::vector<double>(或std::vector<float>)。

您可能要改爲看通過a每個元素循環和推背從abegin()end()