C++ 범위 기반 for문 사용법
이번 글에서는 C++에서 제공하는 스타일의 for문인 범위 기반 for문의 사용 방법을
array, string 및 vector에서의 사용 예제를 통해서 살펴보겠습니다.
배열 순회 예시, 값 변경 시 주의 사항
배열 내 값들을 순회할 때, C언어 스타일의 순회 방법도 C++에서 여전히 사용 가능하지만
아래의 예시 코드와 같이 for(자료형 순회 변수 : 배열) 형태로도 사용하실 수 있습니다.
이와 같은 형태로 for문을 사용하는 방식을 범위 기반 for문이라고 합니다.
#include <iostream>
using namespace std;
int main() {
int arr1[] = {0, 1, 2, 3};
// C언어 스타일의 for문
for(int i = 0; i < 4; i++){
cout << arr1[i] << '\n';
}
// C++ 스타일의 for문
for(int num : arr1){
cout << num << '\n';
}
}
위 코드를 실행시켜보면, 두 for문 모두 arr1의 원소인 0, 1, 2, 3이 한 줄씩 걸쳐 출력됩니다.
단, 범위 기반 for문 사용 시 주의 사항으로 순회 도중 값을 변경시키고 싶은 경우에는
Call by Reference 방식의 순회를 해주셔야 값 수정이 가능하다는 점입니다.
#include <iostream>
using namespace std;
int main() {
int arr1[] = {0, 1, 2, 3};
// Call by Value : 실제 저장 값 변화 X
for(int num : arr1){
num *= 2;
}
// 0, 1, 2, 3이 한 줄씩 걸쳐 출력
for(int num : arr1){
cout << num << '\n';
}
// Call by Reference : 실제 저장 값 변화 O
for(int &num : arr1){
num *= 2;
}
// 0, 2, 4, 6이 한 줄씩 걸쳐 출력
for(int num : arr1){
cout << num << '\n';
}
}
위의 코드에서 첫 for문의 Call by Value 방식으로는
배열에 실제로 저장된 값을 변화시킬 수 없습니다.
따라서, 다시 배열을 순회하며 값을 출력하면 0, 1, 2, 3이 그대로 출력되는 것을 볼 수 있습니다.
반면, 아래의 for문처럼 순회 변수에 &를 붙여 Call by Reference 방식으로 바꿔주시면
실제 저장 값의 변경이 가능해지고, 결국 최종적으로 원래 값에 2배가 곱해진
0, 2, 4, 6이 한 줄씩에 걸쳐서 출력되는 것을 확인하실 수 있습니다.
문자열, 벡터 순회 예시
char 자료들의 배열로 볼 수 있는 문자열 자료형이나
C++에서 제공하는 또다른 자료형 형태인 벡터에서도
위와 같은 형태의 범위 기반 for문 사용이 가능합니다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
// 문자열 순회 예시
string str1 = "hello world!";
for(char chr : str1){
cout << chr;
}
cout << '\n';
// 벡터 순회 예시
vector<int> vec1 = {0, 1, 2, 3};
for(int num : vec1){
cout << num << '\n';
}
}
실제로 위의 코드를 실행시켜보면 각각의 string 및 vector에 저장된 값들이
잘 출력된다는 점을 확인하실 수 있습니다.
물론, 문자열과 벡터의 경우에도 값 수정이 필요한 경우, 마찬가지로 Call by Value가 아닌
Call by Reference 형태로 순회를 진행해주셔야 한다는 점에 유의해주셔야 합니다.
'C & C++' 카테고리의 다른 글
[C언어] if문 활용 조건문 사용법 예제 정리 (else if, else문, 중첩 조건문 등) (0) | 2022.05.01 |
---|---|
[C언어] 2차원 배열 선언, 값 접근/수정/출력 방법 및 문자열 배열 (0) | 2022.04.17 |
[C언어] while문 반복문 예제 : 기본 사용법, continue/break, do~while문, for문과의 용도 차이 (0) | 2022.04.12 |