: 데이터가 선형적으로 저장되는 컨테이너
동적 배열 구조로, 런타임에 크기를 임의로 변경할 수 있다.
메모리에 데이터가 연속적으로 위치한다.
벡터는 포인터 세 개로 구현되어 있다.
데이터를 삽입하면 빨간 포인터가 가리키는 부분에 삽입되고, 빨간 포인터가 1 증가한다.
벡터의 메모리 할당 방식은 size(실제 사용 메모리 크기)와 capacity(여유분 포함 메모리 크기)로 이루어진다. (항상 size <= capacity)
맨 끝이 아닌 중간 부분에서의 데이터 삽입 및 삭제는 비효율적이다. (삽입이나 삭제 위치 뒤의 모든 데이터를 한 칸씩 뒤로 밀거나 앞으로 당겨야 하기 때문)
특정 원소를 인덱스로 임의 접근(Random Access)이 가능.
벡터와 마찬가지로 메모리에 데이터가 연속적으로 위치한다.
배열은 연속된 메모리들의 첫 주소를 담는 포인터이다.
크기가 고정이기 때문에 처음 설정한 데이터의 크기를 넘어서 데이터를 저장할 수 없으므로 원소의 추가나 삭제가 불가능하다.
특정 원소를 인덱스로 임의 접근(Random Access)이 가능.
노드 기반 컨테이너이다.
이중 연결 리스트(Double Linked List)와 같은 형식으로 구현되어 있다.
데이터가 메모리 상에 비연속적으로 저장된다.
임의 접근(Random Access)가 불가능하다.
중간 부분에서의 데이터 삭제가 벡터보다 효율적이다. (모든 데이터를 하나씩 밀거나 당길 필요 없이 링크 필드만 변경해주면 되기 때문)
: Key - Value 구조를 가지는 컨테이너, 특정 기준에 따라 원소를 자동 정렬하는 컨테이너
각 노드가 key와 value의 쌍으로 이루어진 트리.
중복을 허용하지 않는다.
map의 각 원소들은 pair 객체로 저장되는데, first가 key, second가 value로 저장된다.
Red-Black Tree(자가 균형 이진 탐색 트리)로 구현되어 있다.
자료를 저장할 때 자동으로 key 값을 기준으로 오름차순 정렬한다.
map<type1, type2, greater<type1>>
과 같이 선언key를 통해 value에 접근
map<int, string> m;
m[1] = "ABC";
cout << m[1];
실행 결과 : ABC
map과 다르게 값이 정렬되지 않고 랜덤하게 저장된다.
map과 다르게 Hash Table로 구현되어 있다.
많은 자료를 저장하고, 검색 속도가 빨라야 하는 경우에 사용하면 좋다. (자료양이 적을 때는 메모리 낭비 발생)
나머지는 map과 동일한 특징을 가진다.