c ++类型转换数组

Kar*_*ser 9 c++ arrays casting

如何将一个int数组类型化为float数组?谢谢.

eph*_*ent 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;
}
Run Code Online (Sandbox Code Playgroud)


Cha*_*via 11

如果你有一个ints 数组,你基本上有一个N块int存储在内存中连续存储.然而,浮点数组将是在存储器中连续存储的N个浮点数,即存储器中完全不同的位序列.另外,浮点值以完全不同于积分值的方式以二进制表示.事实上,你甚至无法确定inta的大小与a相同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
}
Run Code Online (Sandbox Code Playgroud)

  • 或者您可以使用std :: copy,并在进行赋值时隐式为您执行. (4认同)

Bri*_*ndy 5

如果您使用向量而不是数组,则可以在向量的构造函数中使用迭代器来进行复制。

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);
Run Code Online (Sandbox Code Playgroud)

如果你有一个数组作为输入,但你可以有一个向量作为输出,你也可以这样做:

int ai[] = {1,2,3};
std::vector<float> vf(ai, ai+3);
assert(vf.size() == 3);
Run Code Online (Sandbox Code Playgroud)

如果您需要一个数组作为输入和输出,您可以使用std::copy,但只需确保您的输出数组足够大:

int ai[] = {1,2,3};
float af[] = {0, 0, 0};
std::copy(ai, ai+3, af);
Run Code Online (Sandbox Code Playgroud)

注意:std::copy,并且向量构造函数不会盲目地复制内存,它会为每个元素在两种类型之间隐式进行转换。它执行赋值 *result = *first、*(result + 1) = *(first + 1) 等等...