如何将向量传递给异步调用?
std::vector<int> vectorofInts;
vectorofInts.push_back(1);
vectorofInts.push_back(2);
vectorofInts.push_back(3);
std::async([=]
{
//I want to access the vector in here, how do I pass it in
std::vector<int>::iterator position = std::find(vectorofInts.begin(), vectorofInts.end(), 2);
//Do something
}
答案 0 :(得分:6)
您已经通过将[=]
指定为捕获列表,已经通过lambda中的值捕获它。因此,在lambda体内,您可以使用vectorofInts
来引用该副本。如果您想要更明确,可以指定[vectorofInts]
;只有[=]
会自动捕获lambda使用的任何变量。
但是,除非lambda为mutable
,否则您无法修改捕获的值。因此,向量被视为const
,find
返回const_iterator
。正如错误消息(在评论中发布)所示,您无法将iterator
转换为const_iterator
,因此请将您的变量类型更改为std::vector<int>::iterator
或auto
。< / p>
如果要访问矢量本身而不是副本,则通过指定[&]
或[&vectorofInts]
进行捕获,如果您想要显式的话。但是如果你在这样的线程之间共享它,请小心你用它做什么,并确保在异步访问完成之前不要销毁它。