【发布时间】:2011-09-17 22:49:27
【问题描述】:
将std::vector<int> intVec 转换为std::vector<double> doubleVec 的好方法是什么?或者,更一般地,转换两个可转换类型的向量?
【问题讨论】:
标签: c++ stl vector type-conversion
将std::vector<int> intVec 转换为std::vector<double> doubleVec 的好方法是什么?或者,更一般地,转换两个可转换类型的向量?
【问题讨论】:
标签: c++ stl vector type-conversion
使用std::transform算法:
std::transform(intVec.begin(), intVec.end(), doubleVec.begin(), [](int x) { return (double)x;});
【讨论】:
使用std::vector的范围构造函数:
std::vector<int> intVec;
std::vector<double> doubleVec(intVec.begin(), intVec.end());
【讨论】:
std::copy(...) 函数吗?您可以将其添加到答案中吗?
copy(v_int.begin(), v_int.end(), back_inserter(v_float));,或v_float.resize(v_int.size()); copy(v_int.begin(), v_int.end(), v_float.begin());
std::distance() "如果是随机访问迭代器,则函数使用 operator- 来计算。否则,函数重复使用递增运算符 (operator++)。"所以在这种情况下,可以通过减去迭代器来找到元素的数量。标准库是否实现为使用 std::distance 作为初始 reserve() 是另一个问题,但godbolt.org/z/6mcUFh 至少包含对 std::distance() 的调用。