이 이야기에 앞서 vector 와 string 에 대해서 이야기를 하자면, vector 와 string 은 실제로 배열처럼 사용 할수가 있다. 이런 배열 처럼 사용 할수 있는 점 때문에. vector와 string으로 만든 메모리는 실제로 배열처럼 차례대로 메모리에 올라간다.

여기서 잠깐, 그렇다면 어떻게 동적으로들어 가는 메모리가 배열처럼 차례대로 메모리에 올라가느냐?
배열 처럼 차례대로 메모리에 올리기 위해서 vector 와 string 은 미리 메모리 공간을 기본값만큼 할당 받아 놓고, 메모리가 새롭게 추가 되면, 이 공간에 넣어 둠으로써 배열처럼 작동시키는 것이다. 이 할당 받아 놓은것을 최대 용량으로 표현하겠다.


그렇다면 어떻게 vector 와 string에 들어가는 원소의 갯수에 제한이 없느냐?
vector 와 string 은 둘다 원소가 들어올때마다 원소의 갯수를 카운팅을 하여,  최대용량과 큰지 비교하여, 크다면, 최대용량을 두배만큼 메모리를 다시 할당 받아 놓고, 기존의 원소를 새로 할당한 메모리에 순서데로 넣고, 기존 컨테이너의 모든 원소를 소멸시킨다.

이런 특징 때문에 reserve() 함수를 호출하여, 컨테이너 용량(최대로 담을수 있는 원소의 갯수)을 내가 예측할수 있는 최대 범위 만큼 할당해 놓아, 재할당 비용을 면제받아야 한다는게 내가 알고 있는 전부이다.

책 내용도 여기까지 설명해 주었고, 내가 몰랐던 string의 재할당 트릭을 소개해 준다고 한다.


코드로 함수 몇개 소개하고 이 항목을 마친다.
size() 함수, 현재 원소의 갯수를 알려 준다.(부하는 거의 없다고 본다, 카운팅이 되기에...)
capacity() 함수, 최대 용량을 알려 준다. (더 담을수 있는 용량이 아닌 최대 용량이다)
resize(size_t n) 함수, 컨테이너의 원소의 갯수를 인자 만큼 늘려주거나 줄여 준다.
reserve(size_t n) 함수, 최대 용량을 n개로 만들어 준다.(기존 최대용량보다 작으면 무시 된다.)


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기

댓글을 달아 주세요

">
  1. Favicon of http://blog.naver.com/nextnine nextnine
    2008.08.08 04:24

    잘 보고 갑니다~