c++에서 vector을 활용할때, resize(n); 함수를 사용하는 경우에 대하여.

처음에 이런식의 문제 풀이 부분을 접했을때, 그동안은 resize() 함수를 사용하는 경우가 없어서 왜 이걸 사용해주어야 하는지 궁금했고, 이 부분을 제거했을때 어떤식으로 반응하는지 궁금했는데, 일단 runtime error가 발생하고, 이걸 그대로 제출하면 out of bound가 뜬다. 

왜 out of bound가 뜨는지 몰라서 생각을 해보다가 잘 모르겠어서 gpt에 물어봤고 이해가 되는 답변을 받아서 여기에 기록해둔다. 

 

 

답변을 보자면 내가 처음에 vector을 선언할때, 사이즈를 명시해준게 없어서 이건 사이즈가 정해져있지 않은 상태이다. 이렇게 글로벌하게 vector를 선언했을때 어떻게 되는지에 대해서 알아보자면, 

 

딱 내가 접한 문제에 대한 부분까지 맨 아래에서 알수있다

내가 지금 초기값을 설정하지 않은 global한 vector를 선언했는데, 사이즈를 같이 선언하지 않은 상태에서 사이즈가 0인데 이 사이즈가 0인 vector에 순차적으로 접근하면서 nums[i];형태에 접근해서 cin을 했는데, 사이즈가 0이라 이런식의 접근이 불가능해서 out of bound가 된것이다. 

그래서 수정한 코드를 첨부해보면, 

 

 

 

이런 형태로 만들었다. 

지금까지 봐왔고 익숙하던 형태의 vector에 인자를 하나씩 순차적으로 넣는 형태이다. 

그러니까 그동안 익숙하던 형태로 이런식으로 push_back 함수를 이용해서 사이즈를 하나씩 늘리면서 작성해주던지

아니면 애초부터 n이라는 사이즈 인자를 받았을때 그 사이즈 만큼 vector의 사이즈를 재조정 해주어야 하는 것이다. 

아무래도 아직은 resize()함수가 익숙하지 않으니까, 한동안은 익숙하던 push_back을 활용해서 사이즈를 하나하나 키우면서 인자를 넣어보도록 하자. 

두 경우 모두 정답에는 문제가 없었다. 

 

 

  Comments,     Trackbacks