1
考え方は、配列の各要素に対して並行して操作を実行することでした。私は以下を思い付きます:std :: asyncを使って配列を編集する
struct dataContainer
{
int value;
bool flag;
dataContainer()
: value(1)
, flag(true)
{}
};
int main()
{
std::vector<dataContainer> arrData;
arrData.resize(10);
{
std::vector<std::future<void> > results;
std::for_each(arrData.begin(), arrData.end(), [&results](dataContainer& tData) {
results.emplace_back(std::async(std::launch::async, [](dataContainer& ttData) {
ttData.value++;
ttData.flag = false;
}, tData));
});
}
return 0;
}
しかし、std :: asyncによって呼び出されたラムダは、arrDataの要素に対して操作を実行しません。実際、私は何が起こっているのか分かりません。操作はdataContainerのローカルコピーで実行されているようです。
何が起きているのですか?このように配列要素の操作を実行するにはどうすればよいですか?
async'コール 'で' tData'の最後の出現 - 'に変更しますstd :: ref(tData) 'を実行します。それ以外の場合は、実際には価値によって捕捉されます。 –
ええ、それは助けました。ありがとう! –