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调用的lambda不会对arrData的元素执行操作。其实,我不明白发生了什么事。看来,操作是在dataContainer的本地副本上执行的。
所以问题是怎么回事,以及如何以这种方式对数组元素执行操作?
tData'的'最后一次出现在'async'通话 - 将其更改为'的std :: REF(TDATA)'。否则,它确实被价值捕获。 –
是的,它有帮助。谢谢! –