정체불명의 모모
c++ 02 : 범위-기반for 루프 (어서와c++은 처음이지?) 본문
범위-기반 for 루프
= 배열에 대해서는 범위-기반 for 루프(range-based for loop)를 사용할 수 있다.
이 형식은 배열 안에 들어 있는 모든 값에 대하여 반복할 때 사용된다.
이러한 for 루프는 "범위" 안의 모든 요소에 대하여 반복하게 되고, 반복할 때마다 "변수"가 요소의 값으로 설정
된다. 여기서 " 범위"란 배열, 컨테이너, 시퀀스 등이 될 수 있다.
우리는 아직 시퀀스나 컨테이너는 아직 다루지 않았기 때문에 정수 배열에 대하여 예제를 보자.
#include <iostream>
#include <string>
using namespace std;
int main()
{
int list[] = { 1,2,3,4,5,6,7,8,9,10} ;
for(int i : list){ // list배열이 범위 , int i 는 변수가 되는 것 이다.
cout << i << "" ;
}
cout << endl;
}
배열은 항목들을 모아 놓은 컨테이너라고 생각할 수 있다.
코드에서 list는 배열로서 10개의 정수가 여기에 모여 있다.
여기서 for 루프의 콜른(:) 앞에 int형의 변수 i가 선언되었다. 반복할 때마다 변수 i 는 배열의 요소값으로 초기화 되고
우리는 이것을 반복 루프에서 사용할 수 있다.
우린 아직 참조자를 학습하지 않았는데 여기서는 참조자를 사용하면 변수에 배열 요소를 복사하지 않고도 반복이
가능하다. 참조자를 사용하면 복사할 필요가 없어서 실행 속도가 빨라진다.
for(int& i :list)
{
cout << i << "";
}
( ' 아직은 뭔뜻인지 모르겠다... 참조자가 무엇인지 봐야겠다. ')
1장에서 학습한 auto를 여기서 사용하여도 된다.
for(auto&i : list) {
cout << i << "" ;
}
◈만약 for루프 안에서 배열 요소의 값을 변경해야 한다면 다음과 같은 코드는 잘못된 코드이다.
#include<iostream>
#include<string>
using namespace std;
int main()
{
int list[] = { 1,2,3,4,5,6,7,8,8,10 };
for( int i : list ) {
i = i * i;
}
for( int i : list ) {
cout << i << "" ;
}
return 0;
}
위의 실행 결과를 보면 전혀 변경되지 않았는데, 변수 i로 배열의 요소들이 복사되기 때문이다.
변수 i의 값을 아무리 변경해보았자 배열 요소의 값은 바뀌지 않는다.
이때는 다음과 같이 참조자를 사용하여야 한다. 참조자는 배열 요소들의 별칭?이므로 배열 요소들이 변경된다.
#include <iostream>
#include <string>
using namespace std;
int main( )
{
int list [] = {1,2,3,4,5,6,7,8,9,10};
for ( int & i : list ) { // 변경하고 싶은 요소의 식을 넣은 곳에 &(참조자)를 넣어준다.
i = i*i ;
}
for( int i : list ) {
cout << i << " " ;
}
return 0;
}
'프로그래밍(c++)' 카테고리의 다른 글
c++ 문제 : 사과를 제일 좋아하는 사람 찾기 (어서와c++은 처음이지?) (1) | 2019.12.04 |
---|---|
c++ 문제 : 배열에서 최대값 찾기 (어서와c++은 처음이지?) (0) | 2019.12.03 |
c++ 02 : 배열 (어서와c++은 처음이지?) (0) | 2019.12.03 |
c++ 02문제 : 도형의 면적 계산하기 (어서와c++은 처음이지?) (0) | 2019.11.28 |
c++ 02문제 : 자음과 모음 개수 세기 (어서와c++은 처음이지?) (0) | 2019.11.28 |