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

问题描述 投票:0回答:3

std::vector<int> intVec
转换为
std::vector<double> doubleVec
的好干净方法是什么。或者,更一般地说,转换两个可转换类型的向量?

c++ stl vector type-conversion
3个回答
205
投票

使用

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

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

9
投票

使用

std::transform
算法:

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

0
投票

从 c++20 开始,你有了 std::span,它只是由指针和大小组成,可以用来查看连续的内存块而不进行复制,但具有 a 的所有便利。 stl 容器(方法、迭代器等)。

std::vector<int> int_vec = { 1, 2, 3, 4 };
std::span<double> dbl_span(int_vec.data(), int_vec.size());

for (const double dbl : dbl_span) {
  // 
}

注意:span 不拥有它所指向的内存的所有权,因此,如果向量被销毁或移出,或者内部缓冲区被重新分配,则你的 span 将指向无效内存。

© www.soinside.com 2019 - 2024. All rights reserved.