天天看點

力扣刷題457環形數組知識點之C++11lambda

今天在做力扣457環形數組的時候發現别人這樣寫

 auto next = [&](int cur) {

            return ((cur + nums[cur]) % n + n) % n; // 保證傳回值在 [0,n) 中

        };

[&]以引用的方式使用其它外部變量

C++11新特性一直沒好好總結:

我對于lambda的了解是:重構結構體或者運算符的時候用的,但是這裡是寫了一個函數感覺主要是用來減少代碼量。

别人的解釋是:

我們無需定義一個函數結構随後再去使用這個函數。而是直接在使用時将其聲明使用。

lambda的形式是:

[captures] (params) -> ret {Statments;}

captures的選項有這些:

    [] 不截取任何變量

    [&] 截取外部作用域中所有變量,并作為引用在函數體中使用

    [=] 截取外部作用域中所有變量,并拷貝一份在函數體中使用

    [=, &foo]   截取外部作用域中所有變量,并拷貝一份在函數體中使用,但是對foo變量使用引用

    [bar]   截取bar變量并且拷貝一份在函數體重使用,同時不截取其他變量

    [this]            截取目前類中的this指針。如果已經使用了&或者=就預設添加此選項。

都是關于怎麼使用外部變量的。

[]這個比較好奇,這個就是用來捕獲外部變量的,值傳遞還是引用傳遞。

繼續閱讀