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