[C++ STL] `vector::resize()`로 초기화를 기대하면 안 되는 이유

yeonjuLee·2025년 5월 5일

코딩테스트 대비

목록 보기
29/32

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()는 크기만 바꾸므로, 실제 값을 초기화하려면 다른 방법을 사용해야 합니다.

0개의 댓글