티스토리 뷰
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' 카테고리의 다른 글
vector 변수 size() - 1 함부로 쓰지 말 것 (0) | 2020.07.26 |
---|---|
우선순위 큐 (2) | 2012.02.25 |
퀴즈9 사형수 모자색 맞추기 3 (1) | 2011.08.05 |
퀴즈8 사형수 모자색 맞추기2 (0) | 2011.08.05 |
퀴즈7 20명의 사형수 (4) | 2011.08.05 |
퀴즈6 해적들의 금화 문제 (0) | 2011.08.04 |
퀴즈5 와인 1000개에서 독이 든 와인 찾기. (0) | 2011.08.04 |
퀴즈4 구분이 불가능한 알약 한개씩 먹기. (0) | 2011.08.04 |
퀴즈3 칼질 하기 (2) | 2011.08.04 |
댓글
공지사항
- Total
- 737,235
- Today
- 91
- Yesterday
- 255
TAG
- Troubleshooting
- jni강좌
- gcc
- Quiz
- Visual C++
- algorithm
- AWS
- linux
- source
- NDK
- 리눅스
- C
- jni
- kering
- MFC
- API
- db
- android
- database
- 안드로이드
- 음악
- 드라이버
- C++
- winapi
- driver
- Cloud
- it
- 프로그래밍
- Python
- java