Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- GJK
- 분할축 이론
- C
- ubuntu
- Vector
- C++
- 문제풀이
- 수학
- c#
- uclidean algorithm
- 외적
- 충돌 알고리즘
- 다이나믹 프로그래밍
- 벡터
- 리눅스
- Unity
- Graham Scan
- dp
- 보로노이다이어그램
- 우분투
- SOH
- 유니티
- linux
- PS
- 백준
- 내적
- Doubly Connected Edge List
- 알고리즘
- Expanding Polytope Algorithm
- AABB
Archives
- Today
- Total
마이 플밍 블로그
[C++]Vector와 List의 차이 본문
C++의 STL에는 Vector와 List라는 컨테이너가 있다.
언뜻보기에는 두 컨테이너에는 차이가 없는것 처럼 보이지만 사실 큰 차이점이 있다.
1. Vector
- Vector 컨테이너는 일반적인 배열처럼 연속적인 메모리 공간에 저장하는 방식.
- 후에 들어올 요소들을 대비해 미리 예비 공간을 할당함.
- 배열과 달리 크기의 제한을 받지않음.(32bit 기준으로 10억개 정도는 있긴함)
- 맨뒤에 추가하는건 빠르지만 중간에 삽입할 시 O(n)만큼의 시간이 걸림.
- 중간에 삽입시 원소들을 뒤로 밀어냄.
- [1] 과 같이 랜덤 접근이 가능함.
- 동적으로 크기가 확장되지만 비용이 큼
2. List
- List 컨테이너는 더블 링크드 리스트로 구현되어 있음.
- 값을 추가할 때마다 메모리를 할당함
- 중간에 있는 특정 원소를 찾기 위해서 앞에서 부터 순서대로 찾아야함.
- 추가 삭제에 비용이 적음
- [1] 같은 랜덤 접근 불가능
벡터는 연속적인 주소에 할당되어 링크드 리스트 처럼 next 변수가 없으므로 메모리가 리스트보다 더 적다.
컨테이너 끝 외에 곳에서 추가나 삭제가 많다면 리스트를 사용하고 랜덤 접근이 필요하다면 벡터를 사용하는 것이 좋다.
리스트의 메모리가 더 크긴 하지만 더 빠르다.
벡터는 리스트보다 더 좋은 CPU 캐시 지역화를 가지는데 한 요소에 접근하는 것은 캐시 안에 다음 요소가 존재하고 다음 캐시가 느린 RAM을 읽을 필요없이 검색될 수 있을 가능성을 높게 하기 때문에 요소 추가가 많지 않다면 벡터를 사용하는게 좋다.
출처: https://theemeraldtablet.tistory.com/entry/list와-vector-차이점 [에메랄드 타블릿]
'Code > C, C++' 카테고리의 다른 글
[C, C++] memset 함수의 사용법 (0) | 2022.01.11 |
---|---|
C++ 인라인 함수(inline function) (0) | 2021.10.14 |