2015-06-25 44 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()