void listVsVectorSort(size_t nbr_of_randoms)
{
std::uniform_int_distribution<int> distribution(0, nbr_of_randoms);
std::mt19937 engine((unsigned int)time(0)); // Mersenne twister MT19937
auto generator = std::bind(distribution, engine);
NumbersInVector vector(nbr_of_randoms);
NumbersInList list;
std::for_each(vector.begin(), vector.end(), [&](Number& n)
{ n = generator(); list.push_back(n); } );
TimeValue list_time;
{ // list measure sort
g2::StopWatch watch;
list.sort();
list_time = watch.elapsedUs().count();
}
TimeValue vector_time;
{ // vector measure sort
g2::StopWatch watch;
std::sort(vector.begin(), vector.end());
vector_time = watch.elapsedUs().count();
}
std::cout << nbr_of_randoms << "\t\t, " << list_time << "\t\t, " << vector_time << std::endl;
}
我在Code Project看到了上面的代码。在该行:
std::for_each(vector.begin(), vector.end(), [&](Number& n)
{ n = generator(); list.push_back(n); } );
[&amp;](数字&amp; n)是什么意思,我更具体地询问[&amp;]的含义。
答案 0 :(得分:2)
这意味着lambda范围之外的所有内容都将通过引用捕获。在这种情况下,generator
和list
。
答案 1 :(得分:1)
[&]
是lambda表达式的一部分,这意味着它将能够通过引用访问所有封闭变量。例如:
int b = 0;
auto my_lambda = [&](int a) { b = a; };
my_lambda(1);
std::cout << b << '\n'; // prints 1
答案 2 :(得分:0)
[&]
表示所有自动变量都将被捕获到lambda表达的范围内。从本质上讲,lambda表达式将能够使用程序在调用时可以访问的变量。