2016-11-20 2 views
2

Ist es möglich, eine std::vector in einer einzigen Zeile mit Lambda-Funktionen zu initialisieren?Initialisiere std :: Vektor von std :: unique_ptr mit lambdas

ich die folgenden Aliase bin mit:

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

Bisher bin ich in der Lage, Folgendes zu tun:

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))); 

Ich möchte so etwas wie dieses aber in einer einzigen Zeile tun, vorzugsweise unter Verwendung von Lambda.

+1

Was ist der Zweck der einzelnen Zeile, abgesehen von der Verschleierung der Lesbarkeit Ihres Codes? –

+0

Sie können jedes vorstellbare Konstrukt in einer einzigen Zeile schreiben (außer mehreren Makro-Direktiven können Sie nur eine einzelne Makro-Direktive in einer Zeile haben). – user2079303

Antwort

5

So ähnlich?

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; 
      }()}; 
} 

Aber warum?

+0

Ist das eine _einzelne Zeile_ wie gefragt? –

+3

@ πάνταῥεῖ: Es ist eine einzige Aussage. Entfernen Sie die Zeilenumbrüche, wenn Sie sich besser fühlen. –

+0

@LightnessRacesinOrbit Ich habe das nicht für mich gefragt. –

Verwandte Themen