posted by REDFORCE 2017. 3. 22. 17:20

이번 글에서는 1편의 auto에 이어서


range based for에 대해서 적어보겠습니다.


목차


1. Auto

2. range based for

3. enum class

4. non-static data member initializers

5. initializer lists

6. default / delete definition

7. override / final

8. emplacement

9. constexpr

10. lambda

11. random

12. thread


2. range based for


 A. range based for?? 


번역하자면 범위 기반 For 라고 적고 단순히 이해하자면 반복문을 쉽고 안전하게 쓰기 위한 For~ 라고 보면된다.



간단한 설명

  • C++11 기능 중 'auto'와 더불어 간단하면서 유용한 기능
  • VC의 'for each'와 유사
  • 반복문을 아주 쉽고 안전하게 사용할 수 있다.
  • C++ STL의 컨테이너, 배열 등에 사용할 수 있다.


코드를 먼저 살펴보면 한눈에 이해할 수 있다.




가장 첫번째 부터 


 (1) For (일반적인)

 (2) For each

 (3) range based for  로 되어있다.


여기서 눈여겨 볼 것은 auto를 활용한 range based for 문이다.


(3)에서 결국 auto i  값이 입력받은 배열의 iterator로써 활용이 된다.


편하게 auto i 의 값이 입력받은 배열의 begin 부터 end 까지 반복 수행하게 된다.



마찬가지로 std::vector 와 같은 컨테이너에서도 활용이 가능하다.




일반적인 배열을 입력해줬던 내용대로 똑같이 컨테이너를 넣어주면 된다.




그리고 이 글에서 가장 핵심적인 부분!


1. for문에서 의도치 않은 값 복사를 피하고 싶다면?


2. 그리고 이런 range based for문을 활용하면서 값 변경을 막고 싶다면?


3. 둘 다 하고싶다면?


아래와 같이 코드를 수행하면 된다.




값 복사를 피하고 싶다면 레퍼런스를 받아오도록 하게 하면되고


값 변경을 방지하고 싶다면 const를 이용하여 막을 수 있다.


둘다 하고싶다면 위 내용 둘 다 수행하면 된다.




range based for문은 확실히 반복문을 수행하는데 편리하고 쉬운 방법이면서도 안전하게 사용을 할 수 있는 방안이다!


결론. auto 짱짱맨! |O_ o/ x 256




ps. 내가 자꾸 auto 성애자가 되는 것 같다..하앜..