auto
C++11에는 'auto'라는 키워드가 새로 생겼다. auto를 사용하면 변수를 정의할 때 명시적으로 형(type)을 지정하지 않아도 된다. auto는 변수를 초기화 할때 초기화 값에 따라서 자동으로 형을 결정해주기 때문이다. 즉, auto는 '변수를 정의할 때 명시적으로 형을 지정하지 않고 컴파일 때 자동으로 결정해주는 키워드;라고 기억하면 된다. auto는 지역 변수에서만 사용할 수 있으므로 클래스의 멤버 변수나 전역 변수, 함수의 인자로는 사용할 수 없다.
<문자열과 정수 변수에 auto 사용>
<auto를 포인터, 참조에 사용한 예>
람다(lambda)
람다는 '람다 함수' 또는 '이름 없는 함수' 라고 부르며, 그 성질은 함수 객체와 같다. C++ 규격에서 람다는 특별한 형을 가지고 이싸. 그러나 'decltype'(C++11에서 새로 생김)과 'sizeof' 에서는 사용할 수 없다.
람다 덕택에 C++의표현력이 이전보다 훨씬 더 증대되었고, 특히 STL 알고리즘을 사용할 때 아주 유용하다.
<람다를 변수에 대입>
<파라미터 사용>
<반환값 사용>
STL의 find_if에서 람다 사용
앞에서 "STL의 알고리즘을 사용할 때 람다를 사용하면 아주 유용하다" 라고 했는데, 다음 예제를 보면 얼마나 편해지는지 한눈에 알 수 있다.
<find_if 알고리즘에서 람다 사용>
캡처
람다를 사용할 때 람다 외부에 정의되어 있는 변수를 람다 내부에서 사용하고 싶으면 그 변수를 캡처(capture)하면 된다. 캡처는 참조나 복사로 전달이 가능하다. 참조로 전달할 때는 '&'을, 복사로 전달할 때는 '변수 이름'을 기술한다.
람다 표현의 '[](파라미터){식}'에서 앞의 '[]'사이에 캡처할 변수를 기술한다.
<참조로 캡처>
<복사로 캡처>
<복수의 변수 캡처>
<default 캡처>
람다 외부의 모든 변수를 참조(또는 복사)로 캡쳐하고 일부는 복사(또는 참조)로 캡처할수 있다. 하지만 같은 변수를 캡처하고나 default 캡처한 일부 변수를 같은 방식(참조 또는 복사)으로 캡처할 수는 없다.
출처 : Thinking About C++ STL 프로그래밍 (최홍배 지음)
'C++ > STL' 카테고리의 다른 글
13. 메모리관리1 (shared_ptr) (0) | 2017.10.16 |
---|---|
12. C++11 기초 2(range based for, enum, nullptr ) (0) | 2017.10.13 |
10. 범용 수치 알고리즘(accumulate, inner_product) (0) | 2017.10.11 |
9. 정렬 관련 알고리즘(sort, binary_search, merge) (0) | 2017.10.10 |
8. 변경 가능 시퀀스 알고리즘(generate, copy, remove, replace) (0) | 2017.09.29 |