이 이야기에 앞서 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개로 만들어 준다.(기존 최대용량보다 작으면 무시 된다.)
여기서 잠깐, 그렇다면 어떻게 동적으로들어 가는 메모리가 배열처럼 차례대로 메모리에 올라가느냐?
배열 처럼 차례대로 메모리에 올리기 위해서 vector 와 string 은 미리 메모리 공간을 기본값만큼 할당 받아 놓고, 메모리가 새롭게 추가 되면, 이 공간에 넣어 둠으로써 배열처럼 작동시키는 것이다. 이 할당 받아 놓은것을 최대 용량으로 표현하겠다.
그렇다면 어떻게 vector 와 string에 들어가는 원소의 갯수에 제한이 없느냐?
vector 와 string 은 둘다 원소가 들어올때마다 원소의 갯수를 카운팅을 하여, 최대용량과 큰지 비교하여, 크다면, 최대용량을 두배만큼 메모리를 다시 할당 받아 놓고, 기존의 원소를 새로 할당한 메모리에 순서데로 넣고, 기존 컨테이너의 모든 원소를 소멸시킨다.
이런 특징 때문에 reserve() 함수를 호출하여, 컨테이너 용량(최대로 담을수 있는 원소의 갯수)을 내가 예측할수 있는 최대 범위 만큼 할당해 놓아, 재할당 비용을 면제받아야 한다는게 내가 알고 있는 전부이다.
책 내용도 여기까지 설명해 주었고, 내가 몰랐던 string의 재할당 트릭을 소개해 준다고 한다.
코드로 함수 몇개 소개하고 이 항목을 마친다.
size() 함수, 현재 원소의 갯수를 알려 준다.(부하는 거의 없다고 본다, 카운팅이 되기에...)
capacity() 함수, 최대 용량을 알려 준다. (더 담을수 있는 용량이 아닌 최대 용량이다)
resize(size_t n) 함수, 컨테이너의 원소의 갯수를 인자 만큼 늘려주거나 줄여 준다.
reserve(size_t n) 함수, 최대 용량을 n개로 만들어 준다.(기존 최대용량보다 작으면 무시 된다.)
'책 정리 > Effective STL' 카테고리의 다른 글
항목 19 : 상등 관계(equality)와 동등 관계(equivalence)의 차이를 파악하자 (0) | 2008.07.18 |
---|---|
항목 18 : vector<bool> 보기를 돌 같이 하자. (0) | 2008.07.17 |
항목 17 : 쓸데없이 남은 용량은 "바꿔치기(swap) 묘수"를 써서 없애 버리자. (0) | 2008.07.17 |
항목 16 : 기존의 C API에 vector와 string을 넘기는 방법을 알아두자 (0) | 2008.07.17 |
항목 15 : 잊지 말자! string은 여러 가지 방식으로 구현되어 있다는 사실을... (0) | 2008.07.16 |
항목 13 : 동적으로 할당한 배열보다는 vector와 string 이 낫다. (0) | 2008.07.15 |
항목 12 : STL 컨테이너의 쓰레드 안전성에 대한 기대는 현실에 맞추어 가지자. (0) | 2008.07.15 |
항목 11 : 커스텀 할당자를 제대로 사용하는 방법을 이해하자. (0) | 2008.07.15 |
항목 10 : 할당자(allocator)의 일반적인 사항과 제약 사항에 대해 잘 알아 두자. (2) | 2008.07.14 |
항목 9 : 데이터를 삭제할 때에도 조심스럽게 선택할 것이 많다. (0) | 2008.07.13 |
최근댓글