我正在尝试将整数向量序列化为字符串,以便可以将其存储到文件中。使用的方法是将整数逐字节复制到缓冲区中。为此,我使用了 std::copy_n 函数。
为了反序列化,我反向做了同样的事情,即将缓冲区中的字节逐字节复制到整数中,并将这些整数附加到向量中。
我不确定这是否是实现此目标的最佳/最快方法。
char *serialize(vector <int> nums)
{
char *buffer = (char *)malloc(sizeof(int)*nums.size());
vector <int>::iterator i;
int j;
for(i = nums.begin(), j = 0; i != nums.end(); i++, j += 4) {
copy_n(i, 4, buffer+j);
}
return buffer;
}
Run Code Online (Sandbox Code Playgroud)
vector <int> deserialize(char *str, int len)
{
int num;
vector <int> ret;
for(int j = 0; j < len; j+=4) {
copy_n(str+j, 4, &num);
ret.push_back(num);
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
任何关于如何改进这段代码的输入都会非常有帮助。我也很想知道实现相同目标的其他方法。
我是 C++ 的新手,并试图通过 MPI 发送 bool 数据类型,但 C++ 不支持这种数据类型。
我试图制作它MPI_BYTE
,MPI_INT
但它什么也没打印。
#include <iostream>
#include "mpi.h"
using namespace std;
int main(int argc, char **argv)
{
int R,P;
MPI_Status status;
bool check = false;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &P);
MPI_Comm_rank(MPI_COMM_WORLD, &R);
if (R == 0)
{
check = true;
MPI_Send(&check,1,MPI_BYTE,1,1,MPI_COMM_WORLD);
}
else if (R == 1)
{
MPI_Recv(&check,1,MPI_BYTE,0,1,MPI_COMM_WORLD,&status);
cout << R <<"\t check is \t"<< check << endl;
}
MPI_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
没有错误消息。