将
std::vector<int> intVec
转换为 std::vector<double> doubleVec
的好干净方法是什么。或者,更一般地说,转换两个可转换类型的向量?
使用
std::vector
的范围构造函数:
std::vector<int> intVec;
std::vector<double> doubleVec(intVec.begin(), intVec.end());
使用
std::transform
算法:
std::transform(intVec.begin(), intVec.end(), doubleVec.begin(), [](int x) { return (double)x;});
从 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 将指向无效内存。