C++ 将向量<int> 转换为向量<double>

Posted

技术标签:

【中文标题】C++ 将向量<int> 转换为向量<double>【英文标题】:C++ convert vector<int> to vector<double> 【发布时间】:2011-09-17 22:49:27 【问题描述】:

std::vector&lt;int&gt; intVec 转换为std::vector&lt;double&gt; doubleVec 的好方法是什么?或者,更一般地,转换两个可转换类型的向量?

【问题讨论】:

【参考方案1】:

使用std::transform算法:

std::transform(intVec.begin(), intVec.end(), doubleVec.begin(), [](int x)  return (double)x;);

【讨论】:

【参考方案2】:

使用std::vector的范围构造函数:

std::vector<int> intVec;
std::vector<double> doubleVec(intVec.begin(), intVec.end());

【讨论】:

那么,您还可以使用std::copy(...) 函数吗?您可以将其添加到答案中吗? @Lex: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()); 坏主意,因为构造函数版本将通过使用迭代器类别来预先确定向量的大小,以注意那些是随机访问迭代器,然后保留足够的空间。在复制之前调整大小是一种浪费的零初始化。 @MichaelGoldshteyn 我不明白 - 如果您没有事先指定大小,那么只要超出容量就会自动调整大小(一遍又一遍地复制所有元素)。好的,这是摊销的线性时间,但我敢打赌,这仍然比单个 0 初始化慢很多。我是否遗漏了您的论点? @Algoman 请参阅std::distance() "如果是随机访问迭代器,则函数使用 operator- 来计算。否则,函数重复使用递增运算符 (operator++)。"所以在这种情况下,可以通过减去迭代器来找到元素的数量。标准库是否实现为使用 std::distance 作为初始 reserve() 是另一个问题,但godbolt.org/z/6mcUFh 至少包含对 std::distance() 的调用。

以上是关于C++ 将向量<int> 转换为向量<double>的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将字符串转换为向量

如何将表示二进制的 int 向量转换为表示十进制数的 int 向量? C++

如何将向量转换为特定类型的字符串

如何在 C++ 中将一组整数转换为 3D 向量?

C++ 中的向量存储

c++:将向量转换为元组