for문을 사용할 때
2018. 2. 15. 23:22
for문을 통해 뭔가를 할 때 아무 생각없이 작성하기 전에
원하는 값이 가까운 쪽을 유추할 수 있는지 생각해보자.
이걸 느낀 게 최대공약수를 찾는 문제의 함수를 작성해보면서 인데,
int GetGCD(int a, int b)
{
int iGCD = 1;
for (int i = Smaller(a, b); i > 0; --i)
if (isDividedBy(a, i) && isDividedBy(b, i))
{
iGCD = i;
break;
}
return iGCD;
}
이렇게 작성할 때 만약 입력한 두 수 a, b중 작은 수가 큰 수의 약수였다면 바로 브레이크로 빠져나오게 되며
최악의 경우에만 1까지 내려가서 서로소가 된다.
반면
for (int i = 1; i <= Smaller(a, b); ++i)
if (isDividedBy(a, i) && isDividedBy(b, i))
iGCD = i;
이렇게 작성하면 1부터시작해서 두 수 중 작은 수에 도달할 때까지 전부 다 체크하게 된다.
for문으로 STL을 순회할 때
1. 이터레이터
for(auto iter = v.begin(); iter != end(); ++iter) { ... }
2. 범위기반 for문
for(const auto& n : v) { ... }
3. size()를 이용한 for문
for(int i = 0; i < v.size(); i++)
3번을 사용할 때에
for(size_t i = 0, len = v.size(); i < len; ++i)
처럼 사용하자.
'프로그래밍 > C, C++ 공부' 카테고리의 다른 글
이중배열, N중배열 (0) | 2018.02.17 |
---|---|
배열의 이름 (0) | 2018.02.16 |
C/C++의 컴파일러는 왜 배열의 크기를 알아야 할까? (0) | 2018.02.16 |
정수의 자릿수 구하기, 한 자리씩 판별하기 (0) | 2018.02.16 |
The C++ Programming language의 조언들 (0) | 2016.05.31 |