Boost.MPI recv到现有向量的切片

时间:2016-04-11 17:39:37

标签: c++ boost vector mpi boost-mpi

vector<int> master(100);
vector<reference_wrapper<int>> sub = master(&master[10], &master[20]);
boost::mpi::irecv(source, tag, sub);

上述有效且功能性是否可以恢复和更新向量的子集?

如果没有,是否有除recv和copy之外的等效替代方案?

1 个答案:

答案 0 :(得分:2)

您的代码无效,因为您的编译器很乐意告诉您。 std::vector<std::reference_wrapper<int>>没有这样的构造函数。同样reference_wrapper也不会以这种方式神奇地工作。

有人可能会认为,boost::iterator_range在这种情况下使用是个好主意,但它不支持序列化。因此,除了构建支持序列化的自己的范围适配器之外,您还必须手动完成。幸运的是,使用数组重载非常简单:

comm.irecv(source, tag, &master[10], 10);

这可行,因为std::vectorguaranteed to use contiguous storage。请注意,还必须以数组形式发送数据。不要只发送一个较小的10元素向量。