c++ 자료구조, 알고리즘
vector 주소 재 할당 문제
무한 나무
2023. 8. 27. 12:05
Vector
내부적으로 동적할당배열로 구성되있다고 하며, 데이터가 채워져 공간이 부족해지면 더 큰 새로운 배열을 할당하고 기존 요소들을 새 배열로 옮긴다.
그래서 push_back 할때 재할당 비용이 발생하며, vector의 주소값이 바뀔 수 있다.
재할당 비용을 감소 시킬 방법은 reserve( size) 또는 resize( count, value)를 미리 호출하는 것이다.
- reserve() : 벡터의 용량(capacity)만을 size만큼 변경. 예약된 메모리 공간의 크기만 증가.
- resize() : 벡터의 크기(size)를 count만큼 변경. 벡터에 value값을 count갯수만큼 할당한 것. 주소 재할당 가능성 있음.
Deque
내부적으로 양방향리스트+청크배열로 구성되어 있다고 하며, 일정한 크기의 배열이 순차적으로 메모리에 배치되며 양방향 리스트로 서로 연결해서 큰 메모리 공간을 조각으로 나누어 관리한다.
따라서 양방향으로 빠른 삽입/삭제가 가능하며, vector와 같은 문제가 발생하지 않는다.