For문의 조건문에 vector<>().size()가 들어갔을 때 실행이 안되는 경우
알고리즘 문제를 풀다가 예전부터 몇 번 겪었던 상황인데
for문이 실행이 안 되고 넘어가는 문제가 발생하는 경우이다.
내가 작성했던 코드는
vector<int> v 라고 했을 때 ( vector의 크기는 최소 3 이상. )
for (int i = v.size() - 1; i > v.size() - 4; i--)로 작성했었다.
이 경우에 for문안의 실행문이 실행이 되지 않았고 원인을 계속 찾았다.
원인은 v.size()의 자료형 때문이었다.
vector의 size() 함수의 반환 자료형은 size_t이다.
size_t는 unsigned int이기 때문에 위의 조건인 v.size() - 4의 값은 내가 예상한 값은 -의 값이었겠지만,
int의 범위가 -2,147,483,647 ~ 2,147,483,647인 것과 달리
unsigned int의 범위는 0 ~4,294,967,295이기 때문에 v.size() - 4의 값은 매우 큰 값이 돼버려서 실행이 되지 않는 것이었다.
예전에도 for문이 실행되지 않는 경우를 몇 번 겪었던 적이 있었는데 그때는 원인을 파악하지 못한 채 그냥 int형 변수에 값을 넣어서 사용했었다.
이번에는 왜 안되는지 너무 궁금해서 찾아보았다.
댓글
댓글 쓰기