vector::resize()는 초기화 함수가 아니다!vector<int> arr에서 resize()를 통해 새로운 크기로 특정 값을 초기화할 수 있다는 것을 알게 되었습니다.
하지만, memset이나 fill 같은 초기화 함수처럼 사용하면 안 됩니다.
그 이유는 resize()는 항상 초기화를 보장하지 않기 때문입니다.
vector::resize(N, val)의 실제 동작| 조건 | 동작 설명 | 초기화 여부 |
|---|---|---|
현재 크기 < N | 새로운 요소를 val로 채워서 크기 증가 | ✅ 초기화됨 |
현재 크기 == N | 아무 일도 하지 않음 | ❌ 초기화 안 됨 |
현재 크기 > N | 뒤쪽 요소 제거 (앞쪽은 그대로 유지됨) | ❌ 초기화 안 됨 |
vector<int> p(1000001, -1);
int main() {
cin >> T;
for (int i = 1; i <= T; i++) {
p.resize(1000001, -1); // 이미 size가 같으면 아무 일도 일어나지 않음
}
}
-1로 초기화된다고 착각할 수 있지만, size가 같으면 아무 것도 하지 않습니다. 이전 값이 남아 오류를 발생시킬 수 있습니다.추가로 배열 초기화 방식에 대해 더 알고 싶다면, 아래 포스트를 참고하세요!
👉 [C++ STL] 다차원 배열 초기화 방법 총정리 (2차원 배열 초기화)
resize()는 크기를 조절하는 함수일 뿐, 초기화 함수가 아닙니다.fill()이나 memset()을 사용하세요.resize()는 크기만 바꾸므로, 실제 값을 초기화하려면 다른 방법을 사용해야 합니다.