Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Tags more
Archives
Today
Total
관리 메뉴

내안에있어

vector의 size와 capacity 정리 본문

[c++]

vector의 size와 capacity 정리

내안에있어 2018. 9. 4. 17:00
반응형

문제를 풀다가 다음과 같은 착오가 발생하였다.


원소의 개수를 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
위코드로 컴파일하니 {0,0,0,0,0,0}만 읽게 되어 오답이 발생한 것이었다.
즉 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