티스토리 뷰
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
									
							
								
								- gcc
- C
- API
- java
- it
- 음악
- AWS
- NDK
- MFC
- Cloud
- jni강좌
- 드라이버
- 안드로이드
- 프로그래밍
- linux
- Python
- source
- Quiz
- Troubleshooting
- algorithm
- C++
- android
- jni
- db
- winapi
- 리눅스
- Visual C++
- kering
- database
- driver
| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 31 | 
									글 보관함