C++ C++;将大量向量转换为字符向量的最有效方法

C++ C++;将大量向量转换为字符向量的最有效方法,c++,vector,casting,stdvector,C++,Vector,Casting,Stdvector,我有一些代码进行一些计算,然后返回大量(数千甚至数十万)的向量的向量的双精度(矩阵)。这些值已经四舍五入到最接近的整数,并且永远不会超过字节的最大大小。矩阵将被展平为一维向量,然后作为二进制数据写入文件。但是,我不想将这些值存储为双倍,因为它们会占用更多空间。它们需要存储为字符,但是返回它们的代码总是会给我双倍的,所以我想知道将所有双倍字符转换为字符的最快方法是什么 我特别想寻找一种将一种类型的向量转换为另一种类型的方法,因为向量很容易写入文件。您是否尝试过std::copy或std::tran

我有一些代码进行一些计算,然后返回大量(数千甚至数十万)的
向量
向量
双精度
(矩阵)。这些值已经四舍五入到最接近的整数,并且永远不会超过字节的最大大小。矩阵将被展平为一维
向量
,然后作为二进制数据写入文件。但是,我不想将这些值存储为双倍,因为它们会占用更多空间。它们需要存储为
字符
,但是返回它们的代码总是会给我双倍的,所以我想知道将所有
双倍字符
转换为
字符
的最快方法是什么


我特别想寻找一种将一种类型的
向量转换为另一种类型的方法,因为向量很容易写入文件。

您是否尝试过
std::copy
std::transform
?看起来应该很简单

在此模式下,您可以毫无问题地投射向量:

const char* VectToChar = (char*)&Vector[0];
在下面的代码中,您可以找到完整的示例。警告:此代码仅对矢量数据读取有效,对写入无效

#include <stdio.h>
#include <vector>

using namespace std;

 int _tmain(int argc, _TCHAR* argv[])
{

    vector<double> Vector;

    Vector.push_back(10.2);
    Vector.push_back(15.2);


    // You can use this method only for data reading, no writing!!
    const char* VectToChar = (char*)&Vector[0];


    // Test
    double d0 = *((double*)VectToChar);
    double d1 = *((double*)(VectToChar+sizeof(double)));
    printf("%f, %f", d0, d1);

    return 0;
}
#包括
#包括
使用名称空间std;
int _tmain(int argc,_TCHAR*argv[]
{
向量;
向量。推回(10.2);
向量。推回(15.2);
//此方法只能用于数据读取,不能用于写入!!
常量字符*向量字符=(字符*)&向量[0];
//试验
双d0=*((双*)向量字符);
双d1=*((双*)(vectotochar+sizeof(双));
printf(“%f,%f”,d0,d1);
返回0;
}

我最后编写了计算中最后一个方法的
char
版本。比必须复制或执行更复杂的操作更容易。

这些值有符号吗?向量是连续存储的。double比char有更多的空间。您不能将
向量
就地转换为
向量
您最好的选择可能是提前将向量作为
向量
返回。不管怎样,你都需要复印。@Cameron是的,他们已经签字了。@AndyG是的,我知道。无法真正更改返回双倍
的代码,因为许多其他期望双倍
的方法都使用它。也许我应该写一个
char
版本的方法?允许的双精度范围是多少?是0到256吗?还是-128到127?还是怎样