2014년 1월 4일 토요일

range-based for 에서의 원소 접근 방식

 C++11 에서 추가된 range-based for 가 있다. 어떤 것인지 확인 해 보면서 알게 된 사실을 포스팅 해 본다.
 사실 아래에 포스팅 할 내용은 C++11 표준 문서에 나와있을 것이다. 😓

일단 아래의 코드 부터..


int main(int argc, char* argv[])
{
std::array<int, 10> arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

for (auto v : arr)
v += 5;

for (int i = 0; i < 10; ++i)
std::cout << arr[i] << std::endl;

return 0;
}


위의 코드 결과는?

1
2
3
4
5
6
7
8
9
10

이다.

 위의 코드는 혹시나 해서 해본 것인데, auto v 는 arr 의 요소에서 값 복사가 이루어 지는 것이였다. 그래서 arr 의 원소에는 어떠한 값 변화가 없었던 것이다. 그렇다면 변경을 해주기 위한 방법으로는? 아주 간단하다. auto v 를 참조형으로 해주면 되는 것이다. 아래의 코드처럼 해주면 된다.


for (auto& v : arr)
v += 5;


이렇게 해서 나오는 결과는?

6
7
8
9
10
11
12
13
14
15


일단, 위의 예시는 일반 배열로 테스트를 해 보았지만 다른 컨테이너 에서는 어떻게 되는지도 확인해 봐야 겠다.

댓글 없음:

댓글 쓰기