728x90
반응형

C++ 표준 컨테이너 std::vectorstd::list의 차이점 비교

  • C++ 표준 라이브러리에는 다양한 컨테이너가 존재하며, 용도에 맞는 자료구조 선택이 성능과 코드의 효율성을 크게 좌우합니다.
  • 그중 많이 사용되는 std::vectorstd::list는 각각 장단점이 뚜렷하여, 상황에 맞게 선택해야 합니다.
  • 이 글에서는 두 컨테이너의 내부 구조, 성능 특성, 사용 추천 상황을 비교해 설명합니다.


1. std::vector

  • 내부 구조: 연속적인 배열 (동적 배열, Dynamic Array)
  • 장점:
    • 임의 접근(Random Access)이 매우 빠름 → O(1)
    • 캐시 적중률이 좋음
    • 끝에 원소 추가/삭제(push_back/pop_back)가 빠름 → 평균 O(1)
  • 단점:
    • 중간 삽입/삭제는 느림 → O(n)
    • 크기가 커질 때 재할당 발생 가능
  • 추천 사용 상황:
    • 인덱스 기반 접근이 많음
    • 삽입/삭제가 주로 끝에서 이루어질 때


2. std::list

  • 내부 구조: 이중 연결 리스트 (Doubly Linked List)
  • 장점:
    • 중간 삽입/삭제가 빠름 → O(1) (iterator 위치에서)
    • 재할당이 없음
  • 단점:
    • 임의 접근 불가능 (순차 탐색 필요)
    • 메모리 사용량이 크고 캐시 효율이 낮음
  • 추천 사용 상황:
    • 빈번한 중간 삽입/삭제가 필요한 경우
    • 임의 접근이 필요 없는 경우


3. 요약

  • 구분 std::vector std::list
    내부 구조 연속적인 동적 배열 이중 연결 리스트
    임의 접근 O(1) 불가능 (순차 탐색)
    중간 삽입/삭제 느림 (O(n)) 빠름 (O(1))
    메모리 구조 연속적, 캐시 효율 높음 불연속적, 캐시 효율 낮음
    사용 추천 상황 인덱스 접근과 끝 삽입이 많은 경우 중간 삽입/삭제가 많은 경우



  • 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄

728x90
반응형

+ Recent posts