首页 > 解决方案 > 使用正确的强制转换用 std::array of double 的元素填充 int 的 std::array 的最简单方法是什么?

问题描述

我想在使用std::array<double, 4>的函数中使用std::array<int, 4>

那么,实现这一目标的最简单/最短(两者)的方法是什么。

例如

#include <array>
#include <iostream>

void printInts(std::array<int, 4> someInts) {
    for(int someInt : someInts) {    
        std::cout << someInt << std::endl;
    }
}

std::array<double, 4> someDoubles{1.1, 2.2, 3.3, 4.4};

int main() {
    printInts(someDoubles); // of course it doesn't work
    return 0;
}

非常感谢您的每一次帮助;)

附言

1
2
3
4

当然会是预期的输出。

标签: c++castingstdarray

解决方案


如果你不能改变函数PrintInts,那么你可以创建一个int数组的版本,然后用它调用函数:

std::array<int, 4> ints;
std::copy(std::begin(someDoubles), std::end(someDoubles), std::begin(ints));
printInts(ints);

请注意,由于转换范围缩小,从doubleto转换可能会丢失精度。int如果转换后的double值不能用int.

这是一个演示


推荐阅读