c++ 2D将int转换为double
C++ 2D Convert int to double
如何将vector<vector<int>> vint
转换为vector<vector<double>>vdouble
?
我从c++中知道convert vector
这是一个非常简单的解决方案,使用emplace_back
和向量范围构造函数:
std::vector<std::vector<int>> intvec;
//intvec filled somehow
std::vector<std::vector<double>> doublevec;
doublevec.reserve(intvec.size());
for (auto&& v : intvec) doublevec.emplace_back(std::begin(v), std::end(v));
#include <iostream>
#include <vector>
#include <algorithm>
double castToDouble(int v) {
return static_cast<double>(v);
}
int main() {
std::vector<std::vector<int>> intv;
std::vector<std::vector<double>> doublev;
std::transform(intv.begin(), intv.end(), std::back_inserter(doublev), [](const std::vector<int> &iv) {
std::vector<double> dv;
std::transform(iv.begin(), iv.end(), std::back_inserter(dv), &castToDouble);
return dv;
});
return 0;
}
简单的解决方案是使用两个循环,一个嵌套在另一个内部,最好是基于范围的for
循环。
您也可以使用例如std::transform
和lambda表达式,该表达式反过来也调用嵌套向量上的std::transform
,后者进行实际的转换。
如果你使用std::transform
,记得设置目标向量的大小,或者使用std::back_inserter
。
一个简单的方法是使用std::transform
和std::vector
的范围构造函数。如果您使用back_inserter
,您应该reserve()
一些容量,以避免重复的重新分配。
实例:http://coliru.stacked-crooked.com/a/84ef0e3d6572792a
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<std::vector<int>> vvi = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
std::vector<std::vector<double>> vvd;
vvd.reserve(vvi.size());
std::transform(begin(vvi), end(vvi), std::back_inserter(vvd),
[](const std::vector<int>& vi) {
return std::vector<double>(begin(vi), end(vi));
});
// Output the destination container for verification:
for_each(begin(vvd), end(vvd), [](const std::vector<double>& vd){
std::copy(begin(vd), end(vd), std::ostream_iterator<double>(std::cout, " "));
std::cout << "n";});
}
相关文章:
- C++在数学计算中将double转换为int
- 错误:无法将"<lambda(double)>"转换为"double(*)(double)"
- 如何将 Java double[][] 转换为 C++ <vector<vector>> JNI?
- 将 std::vector<boost::optional<double>> 转换为 std::vector<double>
- 将 double* 转换为 std::vector<double> (C++)
- 无法将复数<double>转换为双精度
- "double(*)(string, double, double)"尝试传递函数C++时"double"转换错误
- 从 double* 转换为 int 会失去精度
- 从'double'转换为'int'需要缩小转换范围
- 错误:无法将参数“1”的“double*”转换为“double”,错误:数组下标的类型“double[double]”无
- C 编译器从Double转换为INT
- 将“ double*”转换为“ boost :: Any*”
- 警告 C4244:'argument':从 'double' 转换为"浮点数",可能会丢失数据 - C++
- 当我使用模板时,编译器无法将函数的返回类型从 double 转换为 int
- 将double转换为LSBF(小Endian)十六进制字符串
- JNI在将Java double转换为jdouble时出现问题
- 无法将double转换为字符串
- 警告 C4244:"参数":从"double"转换为"int",可能会丢失数据
- C++无法将'long double'转换为'long double*',因为参数'1'为"long
- 在C++中,将double转换为long的类型返回了不正确的值