2016-11-20 116 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我没有为我的要求。 –

相关问题