2016-11-20 118 views
2

是否可以使用lambda函數在一行中初始化std::vector用lambdas初始化std :: unique_ptr的std :: vector

我使用以下別名:

using UI = std::unique_ptr<int>; 
using VUI = std::vector<UI>; 

到目前爲止,我能夠做到以下幾點:

UI init[] = { UI(new int(0)), UI(new int(0)), UI(new int(0)) }; 
VUI vec { std::make_move_iterator(std::begin(init)), std::make_move_iterator(std::end(init)) }; 

VUI vec; 
for (unsigned i=0; i<3; ++i) 
    vec.emplace_back(UI(new int(0))); 

我願做這樣的事情,但在一個單一的線,最好使用lambda。

+1

除了混淆代碼的可讀性之外,單行的目的是什麼? –

+0

你可以在單行中編寫每一個可以想象到的結構(除了多個宏指令,你只能在一行上有一個宏指令)。 – user2079303

回答

5

是這樣的嗎?

int main() 
{ 
    using UI = std::unique_ptr<int>; 
    using VUI = std::vector<UI>; 

    VUI vec{ []() 
      { 
       VUI v; 
       for (int i=0; i<3; ++i) 
        v.emplace_back(new int(0)); 
       return v; 
      }()}; 
} 

但是爲什麼?

+0

這是一個_single line_被要求嗎? –

+3

@πάνταῥεῖ:這是一個單一的聲明。如果它讓你感覺更好,請刪除換行符。 –

+0

@LightnessRacesinOrbit我沒有爲我的要求。 –

相關問題