728x90
반응형
C++
표준 라이브러리에는 다양한 컨테이너가 존재하며, 용도에 맞는 자료구조 선택이 성능과 코드의 효율성을 크게 좌우합니다.- 그중 많이 사용되는
std::vector
와std::list
는 각각 장단점이 뚜렷하여, 상황에 맞게 선택해야 합니다. - 이 글에서는 두 컨테이너의 내부 구조, 성능 특성, 사용 추천 상황을 비교해 설명합니다.
- 내부 구조: 연속적인 배열 (동적 배열,
Dynamic Array
) - 장점:
- 임의 접근(
Random Access
)이 매우 빠름 →O(1)
- 캐시 적중률이 좋음
- 끝에 원소 추가/삭제(
push_back
/pop_back
)가 빠름 → 평균O(1)
- 임의 접근(
- 단점:
- 중간 삽입/삭제는 느림 →
O(n)
- 크기가 커질 때 재할당 발생 가능
- 중간 삽입/삭제는 느림 →
- 추천 사용 상황:
- 인덱스 기반 접근이 많음
- 삽입/삭제가 주로 끝에서 이루어질 때
- 내부 구조: 이중 연결 리스트 (
Doubly Linked List
) - 장점:
- 중간 삽입/삭제가 빠름 →
O(1)
(iterator
위치에서) - 재할당이 없음
- 중간 삽입/삭제가 빠름 →
- 단점:
- 임의 접근 불가능 (순차 탐색 필요)
- 메모리 사용량이 크고 캐시 효율이 낮음
- 추천 사용 상황:
- 빈번한 중간 삽입/삭제가 필요한 경우
- 임의 접근이 필요 없는 경우
-
구분 std::vector
std::list
내부 구조 연속적인 동적 배열 이중 연결 리스트 임의 접근 O(1)
불가능 (순차 탐색) 중간 삽입/삭제 느림 ( O(n)
)빠름 ( O(1)
)메모리 구조 연속적, 캐시 효율 높음 불연속적, 캐시 효율 낮음 사용 추천 상황 인덱스 접근과 끝 삽입이 많은 경우 중간 삽입/삭제가 많은 경우
- 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
728x90
반응형
'C C++' 카테고리의 다른 글
C++11 std::move 개념과 활용 — 이동 시멘틱의 올바른 이해 (0) | 2025.03.19 |
---|---|
GCC 버전별 주요 C++20 기능 지원 현황 (0) | 2025.03.19 |
C++ 배열(array) C++17 이전/이후 차이점 (0) | 2025.03.19 |
C++11 문자열 리터럴(Raw String Literal) (0) | 2025.03.18 |
C++ 중괄호 초기화(Uniform Initialization)와 프리미티브 타입의 기본값 정리 (0) | 2025.03.18 |