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와 같은 문제가 발생하지 않는다.