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?还是怎样