我知道第一个数组的演员。
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());// ???
在这种情况下我该怎么做?
答案 0 :(得分:1)
对于编译器vector<double>
和for(auto&& elem: a)
b.push_back(std::vector<double>(elem.begin(), elem.end()));
是完全不相关的类型,不能隐式转换为另一个。你可以做的是:
http://localhost:3000/#home
答案 1 :(得分:1)
{{1}}
答案 2 :(得分:0)
矢量矢量构造未编译的原因是
vector<vector<double>> b(a.begin(), a.end())
是使用迭代器构造b
的范围,其元素类型为vector<int>
。这将尝试使用b
构建std::vector<double>
的内部std::vector<int>
,毫不奇怪它不应该编译。
将此与您的第一个示例进行比较,
std::vector<float> v_float(v_int.begin(), v_int.end());
是从元素类型为v_float
的迭代器构造int
的范围。这是有效的,因为允许从int转换为float,但不允许从std::vector<int>
转换为std::vector<double>
(或std::vector<float>
)。
您可能希望转而查看a
的每个元素的循环,并推回从a
begin()
和end()
构建的向量