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

上記はベクターのサブセットをrecvして更新するために有効で機能的ですか?Boost.MPI既存のベクターのスライスにrecv

ていない場合は、recvのコピー以外の同等の代替はありますか?あなたのコンパイラは喜んで教えてくれますよう

+0

私はあなたの投稿に過剰な '<<'を修正しました。また、[フォーマットのヘルプ](http://stackoverflow.com/editing-help)を見てください。 – Zulan

+0

ありがとう@Zulan。私は携帯電話から質問を投稿しました。私ができる最良の方法は、冗長な<< – Tims

答えて

2

あなたのコードは、無効です。 std::vector<std::reference_wrapper<int>>のコンストラクタはありません。また、reference_wrapperはこのように魔法のように動作しません。

一つはboost::iterator_rangeが、この場合に使用するのは良い考えであろうと、思うかもしれないが、それはシリアル化をサポートしていません。したがって、シリアル化をサポートする独自のレンジアダプタを構築するのとは別に、手動で行う必要があります。これは幸い配列のオーバーロードを使用して、非常に簡単です:std::vectorguaranteed to use contiguous storageあるので

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

これは動作します。 も、配列形式のデータを送信する必要があります。より小さな10要素ベクトルを送信するだけではありません。

関連する問題