숨창고
[C++] vector에 대해서 본문
vector가 뭔가요?
vector는 대표적인 시퀀스 컨테이너로, 크기를 바꿀 수 있으며 배열과 비슷합니다.
vector는 배열처럼 원소들을 메모리의 연속된 공간에 저장합니다.
그래서 우리는 배열에서처럼 []나 pointer에 적절한 offset을 더해주는 방식으로 vector의 원소에 접근할 수 있습니다.
그러나 배열과는 다르게 vector는 size를 동적으로 바꿀 수 있고, 컨테이너가 메모리를 자동으로 관리합니다.
vector의 메모리 관리 방식은?
내부적으로, vector는 동적으로 할당된 배열을 사용합니다.
원래 배열에 새로운 원소를 추가하기 위해선 새로운 배열을 할당한 후 모든 원소들을 복사해야하는데,
이것은 꽤나 무거운 작업입니다. 그래서 vector는 확장가능성을 대비해 여유 메모리 공간을 할당해둡니다.
따라서 컨테이너는 원소들을 저장하기 위한 공간보다 실제로는 더 큰 용량을 갖게됩니다.
결론적으로, vector는 array보다 더 많은 메모리를 사용하는 것을 대가로 메모리를 관리하고 동적으로, 또 효율적으로 크기를 바꿀 수 있는 것입니다.
다른 dynamic sequence들과 비교하자면(deque, lists, ...)?
vector는 원소들을 메모리의 연속된 공간에 저장하기 때문에 각 원소들에 접근할 때 굉장히 효과적이며,
end에 원소를 추가하거나 제거할 때 조금 효과적입니다.
그러나 정해진 index에 원소를 추가하거나 제거할 때는 다른 dynamic sequence들 보다 비효율적입니다.
vector로 배열 만들기
1 2 3 | vector<vertor<int>> matrix(RR); for(int i = 0; i < RR ; i++) matrix[i].resize(CC); | cs |
// 모든 원소가 0으로 초기화 된 RR*CC 크기의 2차원 배열을 선언합니다.
'공부 > C++' 카테고리의 다른 글
ios::sync_with_stdio(false), cin.tie(NULL) 사용법과 설명 (0) | 2018.11.08 |
---|---|
[C++] string class (문자열) (0) | 2018.11.05 |
[C++] <cstdio>, <iostream>, <stdio.h>에 대해서 (0) | 2018.11.02 |