如何将一个int数组类型化为float数组? 感谢。
答案 0 :(得分:22)
#include <algorithm>
#include <iostream>
#define N 50
int main() {
int intArray[N] = { ... };
float floatArray[N];
std::copy(intArray, intArray + N, floatArray);
std::cout
<< std::boolalpha << std::equal(intArray, intArray + N, floatArray)
<< std::endl;
return 0;
}
答案 1 :(得分:11)
如果你有一个int
的数组,你基本上拥有的是一块N int
在内存中连续存储的块。然而,浮点数组将是在存储器中连续存储的N个浮点数,即存储器中完全不同的位序列。另外,浮点值以完全不同于积分值的方式以二进制表示。事实上,您甚至无法确定int
与float.
的大小相同
因此,您必须在处理数组时单独将每个int
转换为float
,否则通过复制原始数组来创建完全不同的数组。
例如,您可以在处理数组时简单地将每个int转换为浮点数:
int array[100];
// ... fill array with some values
for (int i = 0; i < 100; ++i)
{
float f = array[i]; // implicit conversion here
// now do something with this float
}
答案 2 :(得分:4)
如果使用向量而不是数组,则可以使用向量的构造函数中的迭代器来执行复制。
std::vector<int> vi;
vi.push_back(1);
vi.push_back(2);
vi.push_back(3);
std::vector<float> vf(vi.begin(), vi.end());
assert(vf.size() == 3);
如果你有一个数组输入,但你可以输出一个向量,你也可以这样做:
int ai[] = {1,2,3};
std::vector<float> vf(ai, ai+3);
assert(vf.size() == 3);
如果您需要输入和输出数组,可以使用std::copy
,但只需确保输出数组足够大:
int ai[] = {1,2,3};
float af[] = {0, 0, 0};
std::copy(ai, ai+3, af);
注意:std::copy
,矢量构造函数不会盲目地复制内存,它会隐式地在每个元素的两种类型之间强制转换。它执行赋值* result = * first,*(result + 1)= *(first + 1),依此类推......
答案 3 :(得分:3)
IMO,使用变换并将int向量转换为浮动向量。
float convert (int i) { return static_cast<float>(i); }
int main () {
int first[10];
float second[10];
// set some values:
for (int i=0; i<10; i++)
first[i] = (i*10);
transform (first, first + 10, second, convert);
return 0;
}
答案 4 :(得分:1)
你不能。
您必须创建另一个数组,并使用循环手动复制元素。
在C ++中,编译器通常不会在生成的二进制文件中放入循环,而不会在代码中明确地看到它。
答案 5 :(得分:0)
使用c ++ 17和where
(或任何类似的类),可以普遍解决此问题。
std::array
人们会这样使用template <typename Y, typename X, std::size_t N, template <typename, std::size_t> typename A, std::size_t... Is>
constexpr A<Y, N> elements_cast(const A<X, N> &a, std::index_sequence<Is...>) {
return {std::get<Is>(a)...};
}
template <typename Y, typename X, std::size_t N, template <typename, std::size_t> typename A, typename Indices = std::make_index_sequence<N>>
constexpr A<Y, N> elements_cast(const A<X, N> &a) {
return elements_cast<Y>(a, Indices{});
}
:
elements_cast