내안에있어
vector의 size와 capacity 정리 본문
반응형
문제를 풀다가 다음과 같은 착오가 발생하였다.

원소의 개수를 7개 집어넣었는데 의도치 않은 결과값이 나와 살펴보니,
1 | int value=get_area(wall,0,wall.size()-1); | cs |
1 2 3 4 5 | vector<int> wall(N,0); for (int i = 0; i < N; i++) { cin >> tall; wall.push_back(tall); } | cs |
즉 , vector<int> wall(N,0);에서 {0,0,0,0,0,0}로 벡터가 이미완성된후 push_back을 통해 추가하여서 최종적으론
{0,0,0,0,0,0,7,1,5,9,6,7,3} 으로 벡터가 완성되어
1 | int value=get_area(wall,0,N-1); | cs |
즉 capacity와 size가 증가하여 생겨난 오답이여서 관련 내용을 정리하고자한다.
참고내용 : https://yonmy.com/archives/43

size와 capacity의 관계를 나타낸 그림이다.
capacity는 vector의 요소(element)들을 담을 수 있는 메모리가 할당되어 있는 공간의 용량이다.
size는 실제 유효한 요소(element)들의 갯수이다.
예를 들어, push_back함수를 통해 새로운 요소(element)를 맨뒤에 한개 추가할 때,
capacity > size보다 큰 상황이면 그냥 맨뒤의 공간에 요소를 복사해 넣고 ++size만 일어나며,
capacity == size 이면 capacity가 증가한 새로운 연속된 공간을 할당하고… 기존의 모든 요소들을 복사하여(기존 정보는 지우고..) capacity > size인 상황을 만들어 놓고, 맨뒤에 요소를 복사해 놓고, ++size를 하는 과정이 일어나는 것이다.
reserve는 이 capacity를 프로그래머가 원하는 크기로 할당을 해준다.
이 capacity에 element를 추가하고 초기화하는 함수가 resize이다.
즉 reserve는 >> capacity의 크기를 조절하는 함수. 내부는 null값 or element로 이뤄진다.
resize는 >> capacity 내부에 element를 채워놓고 특정값으로 초기화 하는 함수!
'[c++]' 카테고리의 다른 글
vector 에러 <iterator > (0) | 2018.09.04 |
---|---|
[stack]문제 - 쇠막대기 (0) | 2018.08.31 |
[세그먼트트리] (0) | 2018.08.31 |
[BFS]탈출 (0) | 2018.08.23 |
[위상정렬]개념약간 + 작업문제 (0) | 2018.08.19 |