我有一个正的浮点数组,并希望将此数组转换为带有舍入的无符号短数组。我怎样才能以有效的方式做到这一点?这是一个例子:
usArr[] = {1, 1, 2, 2, 3}
但是,它只会进行转换,因为它基本上复制了前两个字节。结果是usArr[] = {1, 2, 2, 3, 3}
。我的问题是如何将此浮点数组转换为舍入而不是转换为-processIdentifier
?谢谢,我将不胜感激任何帮助!
答案 0 :(得分:3)
您似乎希望舍入到最近而不是向下舍入std::round
将帮助您解决此问题。使用std::transform
一步完成舍入和复制:
#include <algorithm>
#include <iostream>
#include <cmath>
int main()
{
float floatArr[] = {1.2, 1.8, 2.1, 2.5, 3.2};
unsigned short usArr[5];
// (1) Using a lambda to choose correct overload:
std::transform(floatArr, floatArr + 5, usArr, [](float f){ return std::round(f); });
// (2) Using static cast to enforce that specific overload is called:
std::transform(floatArr, floatArr + 5, usArr, static_cast<float(*)(float)>(std::round));
for(int i = 0; i < 5; ++i)
std::cout << usArr[i] << ' ';
}