티스토리 뷰
vector<int> v;
int i = 0;
cout << v.size() - 1 << endl;
for (i = 0; i < v.size() - 1; i++) {
cout << "loop" << endl;
}
아무 생각 없이 작성한 위 코드는 몇번의 루프를 돌까?
나는 아무 생각 없이 size가 0 이기 때문에 for loop 안으로 안 들어갈 것이라 생각했다.
잘못된 생각이었다.
4294967295번의 루프를 탄다...
vector::size()의 리턴 값은 size_t 이고 이는 즉 unsigned_int 이다..
unsigned_int의 MAX 에서 1을 뺀 만큼 루프를 돈다는 뜻.
따라서 저렇게 for loop 안에 vector의 size() - 1 같은 연산을 시도 하려는 경우 반드시 int로 캐스팅 해서 쓰거나,
(UINT32)-1 이 되는 상황이 절대 없다는 확신 하에 써야 할 것이다.
참고로 maxVal = max(maxVal, v.size()); 이런것도 컴파일 에러 난다. max 안에는 size_t가 못들어간다. 암시적으로 형변환을 안해주는 듯.
'Development > Algorithm' 카테고리의 다른 글
우선순위 큐 (2) | 2012.02.25 |
---|---|
퀴즈9 사형수 모자색 맞추기 3 (1) | 2011.08.05 |
퀴즈8 사형수 모자색 맞추기2 (0) | 2011.08.05 |
퀴즈7 20명의 사형수 (5) | 2011.08.05 |
퀴즈6 해적들의 금화 문제 (1) | 2011.08.04 |
퀴즈5 와인 1000개에서 독이 든 와인 찾기. (2) | 2011.08.04 |
퀴즈4 구분이 불가능한 알약 한개씩 먹기. (0) | 2011.08.04 |
퀴즈3 칼질 하기 (2) | 2011.08.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- NDK
- Visual C++
- gcc
- kering
- jni
- 프로그래밍
- jni강좌
- Cloud
- Quiz
- linux
- java
- algorithm
- 안드로이드
- it
- C++
- 드라이버
- Python
- android
- source
- MFC
- 음악
- winapi
- AWS
- API
- C
- driver
- database
- Troubleshooting
- 리눅스
- db
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함