Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

숨창고

[C++] vector에 대해서 본문

공부/C++

[C++] vector에 대해서

숨지기 2018. 11. 2. 19:58

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차원 배열을 선언합니다.