![](/img/trans.png)
[英]In C++, How do I store values into a vector that is inside of a vector when the two vectors are of different types?
[英]How do I store a vector of float vectors in shared memory in C++?
我需要在C ++的共享内存中存储浮点向量的向量。 我有一个有效的玩具示例,用于在共享内存中存储整数。 这是代码:
int main()
{
int pid;
int start = 0;
int shmid;
key_t key;
key = 123;
int *shm;
if ((shmid = shmget(key, sizeof(int), IPC_CREAT | 0666)) < 0)
{
perror("shmget");
exit(1);
}
shm = (int *) shmat(shmid, NULL, 0);
pid = fork();
if (pid > 0)
{
wait(NULL);
cout << *shm << *(shm+1);
}
else if (pid == 0)
{
*shm = 6;
*(shm+1) = 7;
}
else
{
exit(-1);
}
cout << endl;
return 0;
}
但是,据我了解,使用数据类型vector>而不是简单的整数要困难得多。 我是否需要编写一个自定义的分配器(如果是,是否有任何简单的方法来执行此操作?我发现的示例都非常复杂...)才能完成此工作,或者此示例是否有简单的扩展?那可以让我在共享内存中放置一个vector>?
无法将std::vector<T>
存储在共享内存区域中,因为矢量内的实际元素未存储在std::vector<T>
的内存中,而是分配在堆上。
从技术上讲,您可以构造自己的allocator
,但是我认为简单地序列化向量的内容会更容易。
像这样:
vector<float> vec_f;
// some code fills vec_f ..
float *shm;
shm = (float *) shmat(shmid, NULL, 0);
for(auto f : vec_f)
{
*shm++ = f;
}
(或者,如果您不想使用C ++样式迭代)
for(size_t i = 0; i < vec_f.size(); i++)
{
*shm++ = vec_f[i];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.