在下面for循環中的兩個lambdas中,專家(或者至少比我更專業的人)推薦使用第二個循環中顯示的'j'索引。我想明白,爲什麼在功能上,輸出沒有什麼不同。Lambda函數C++:捕獲循環的索引是否有所作爲?
我的可執行程序在Github上here。
for(int j = 0;j<recPtr->numThreads;j++){
recPtr->heads[j] = 0;
recPtr->tails[j] = 0;
headsPtr = &recPtr->heads[j]; // Get the address of the index of the array, one element for each thread for heads.
tailsPtr = &recPtr->tails[j]; // Get the address of the index of the array, one element for each thread for heads.
threads.push_back(thread([headsPtr, tailsPtr, timesToToss]()
{
for(int k=0;k<timesToToss;k++)
{
if (Tosser(dre)) ++(*headsPtr);
else ++(*tailsPtr);
}
})); //Toss a coin!
}
for (int j = 0; j < recPtr->numThreads; j++)
{
recPtr->heads[j] = 0;
recPtr->tails[j] = 0;
headsPtr = &recPtr->heads[j]; // Get the address of the index of the array, one element for each thread for heads.
tailsPtr = &recPtr->tails[j]; // Get the address of the index of the array, one element for each thread for heads.
threads.push_back(thread([j, headsPtr, tailsPtr, timesToToss]()
{
for(int k=0;k<timesToToss;k++)
{
if (Tosser(dre)) ++(*headsPtr);
else ++(*tailsPtr);
}
})); //Toss a coin!
}
提防誰自稱「專家」,當談到++ ...... – Brian
......或任何其他語言太C的訪客。打電話給其他人一個專家,沒問題。自稱,不。但我不確定我是否明白你想要什麼。你想如何使用j? – deviantfan
在那裏理解了你 - 從我的角度來看,他/她解決了我花了一個多星期的時間看起來很困難的多線程問題,所以也許「比我更專家」更準確。我叫他們是專家。 – NonCreature0714