C ++中是否有与python中的astype()函数相同的函数?

时间:2016-03-09 23:46:39

标签: python c++ python-2.7 python-3.x type-conversion

我正在寻找一个可以在c ++中将数组的每个元素转换为float类型的函数(就像python中的astype()一样)。 你知道吗?

由于

1 个答案:

答案 0 :(得分:3)

您可以将单个项目投射到float,但不能一次投射整个阵列。

您可以非常轻松地创建float s的向量,其中包含原始数组中的值,每个向量都单独转换为float类型:

template <class T, size_t N>
std::vector<float> asFloat(T (&input)[N]) {
    return std::vector<float> {input, input+N};
}

但请注意,这会创建一个由原始数组中的值创建的新float值数组,而根本不会更改/影响原始数组。另请注意,由于这是一个模板,因此可以将其应用于定义从T到float的转换的任何类型,即使该转换可能没有多大意义或产生特别有用的结果(例如char):

char input[] = { 'a', 'b', 'c' };

auto result = asFloat(input);

如果您打印出result的内容,通常会获得:

97      98      99

这是abc在大多数常见字符集(ASCII,Unicode等)中的编码,但那些不是真正的作为浮点值很有意义。

但根据评论,您只是尝试创建float数组。这里有一些小细节需要处理。一个是你可能真的想要vector而不是数组。另一个是默认情况下浮点文字的类型为double。使用float值初始化double变量可以(并且经常会)导致可能丢失数据或类似内容的警告。

因此,当您初始化float的数组或向量时,通常需要包含后缀以强制值键入float

std::vector<float> values { 1.0f, 2.0f, 3.0f};