C++ - 조건분기문, 반복문
C++ 조건 분기문, 반복문
1. 조건 분기문
특정 조건이 만족하면 해당 문을 실행하고 만족하지 않으면 해당 문을 실행하지 않는 조건 분기문이다.
1) if else
대부분의 언어들이 if 식별자를 지원하며, C++ 역시 마찬가지이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 단일 조건
if({조건}) {
}
// if 안의 값이 아닐 경우 나머지 처리
if({조건}){
}
else{
}
// 조건 여러개 달기
if({조건}){
}
eles if({조건}){
}
else{
}
만약 if의 대상이 되는 문이 한줄이라면 아래와 같이 중괄호를 생략할 수도 있다.
1
2
if(a==1)
b = 2
if 다음에는 소괄호가 오며 안의 값은 bool type으로 반환되는 비교문이 포함된다.
사실 비교문 대신에 int 타입의 숫자나 char 타입의 문자가 와도 실행이 되는데 이는 0이나 null이 아닌 값은 비교문으로 사용될시 암묵적인 형변환에 의해 true로 사용되기 때문이다.
if와 else if, 그리고 else는 서로 베타적으로 구동되는데, 만약 해당 조건을 만족하는 경우 모두 해당 문을 실행시키고 싶다면 별개의 if로 분리해야한다.
2) switch case
if else는 길어지게되면 가독성이 떨어질 수 있다. 이를 위해서 switch case문을 지원하는데 형태는 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
switch ({변수})
{
case {상수값1}:
// do something
break;
case {상수값1}:
// do something
break;
//...
default:
// do something
break;
}
switch 다음에 소괄호에는 일반적으로 대상 변수 값이 들어간다. 물론 안에 상수를 넣어도 작동은 한다. 다만, 그럴 경우 왜 switch 문을 쓰는건지 의미가 퇴색되므로 그냥 변수가 쓰인다고 생각하면 된다.
이후 case에는 변수와 값이 같은지 비교하는 상수값이 자리한다. if문은 변수가 되지만 switch 문의 경우에는 상수만 가능하다. 해당 case와 대상 변수가 같다면 해당 문이 실행되는데, 문 마지막에 break를 통해 이후 case에서 실행이 안되게 switch 문에서 벗어날 수 있다. 만약 break를 추가하지 않는다면 아래의 case가 변수와 값이 같지 않아도 모두 실행되버린다.
끝에 default는 어느 case에서도 포함되지 실행되는 부분이다. 기본적으로 적어도 이 부분을 실행해야할때 지정하면 좋다.
2. 반복문
1) while
while 문은 그 다음 나오는 소괄호 안의 비교문이 true일 때 중괄호 안의 문을 실행시키는 반복문이다.
1
2
3
4
5
6
int a = 0;
whlie(a<10) {
std::cout << "hello" <<endl;
a +=1 ;
}
// a가 9까지 출력
여기서 while은 특정 조건일때 중단되도록 하기도하지만 대부분 이동문인 continue와 break와도 많이 사용된다. continue는 반복문 안에서 실행될시 continue 아래의 문을 실행시키지 않고 loop의 처음으로 돌아간다. break는 아예 loop에서 탈출하게 된다.
사실 이 continue와 break는 워낙에 다른 언어에서 많이 사용하니까 알 것이다.
1
2
3
4
5
6
7
8
9
10
11
int a = 0;
whlie(a<10) {
if(a==1)
continue; // 해당 문 실행시 아래 std:: ~ 부분부터 실행 않고 loop 처음으로 돌아감
if(a==5)
break; // 해당 문 실행시 while 반복문 탈줄
std::cout << "hello" <<endl;
a +=1 ;
}
아예 while 소괄호의 비교문안에 true를 넣어서 무한 루프를 사용하기도 한다.
이런 경우 특별히 break를 하지 않는다면 무한히 루프를 실행시킨다.
1
2
3
while(true){
//do something
}
2) do-while
while의 경우 최초 접근시 비교문을 거친뒤 해당 비교문이 true라면 실행하지만 이 do-while의 경우 while과 완전히 동일하되 최소 한번의 실행은 하고 난 뒤 비교문을 이용하여 loop에서 탈출할지 말지를 결정한다.
1
2
3
do {
// do something
} while({조건})
3) for
a. 단순 사용법
c에서 배웠던 것과 동일한 방식이다. for안에는 변수 초기화, 비교문, 조건 변경하는 문이 들어있다.
1
2
3
for(int i=0;i<10;i++){
// do something
}
위 코드의 경우 지역 변수 i를 선언하고, i가 10이하일때까지만 실행시키며 한번 루프를 실행시키면 i에 1을 더해주는 연산을 한다.
물론 다 비우고 비교문만 사용할 수도있다. 그런데 그럴 거면 그냥 while문을 쓰는게 낫다.
1
2
3
4
int i = 0;
for(;i<10;){
i+=1;
}
b. 범위 기반 사용법
이 방식은 사실 하나씩 값을 뽑아올 수 있는 자료구조에서 쓸 수 있는 방식이다.
이 방식을 지원하는 자료형은 배열과 std::array, 그리고 STL 자료구조 중 vector, list, set, map, string이 있으며 커스텀으로 만들어진 자료형이 있다면 begin()함수와 end()함수로 엑세스할 수있다면 모두 사용가능하다.
사용법은 아래와 같다.
1
2
3
4
5
vector<int> a = {1,2,3,4,5};
for(int temp : a){
//do something
}
temp 부분에 어떤 자료형이 올지 명시하지 않고 auto로 사용해도 괜찮다.
혹은 아래와 같이 사용할 수도 있다.
1
2
3
4
5
vector<int> a = {1,2,3,4,5};
for(auto num=a.begin();num!=a.end();++num){
cout << *num <<endl;
}
주소 값으로 엑세스하는 것으로 포인터로 찍으면 값을 읽어낼 수 있다.
※ 추가 업데이트 예정