2016-11-20 1 views
2

람다 함수를 사용하여 한 줄에 std::vector을 초기화 할 수 있습니까? ,람다로 std :: unique_ptr의 std :: vector 초기화 :

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

나는이 같은 있지만, 한 줄에 뭔가를하고 싶습니다

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

는 지금까지 다음 작업을 수행 할 수 있어요 :

나는 다음과 같은 별칭을 사용하고 있습니다 바람직하게는 람다를 사용한다.

+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

요청한대로 그 줄이 하나입니까? –

+3

@ πάνταῥεῖ : 그것은 하나의 진술입니다. 느낌이 좋으면 개행 문자를 제거하십시오. –

+0

@ LightnessRacesinOrbit 나는 내 것을 대신하여 묻지 않았다. –

관련 문제