[c++] vector 선언 및 입력

1 분 소요

나만 몰랐었던 vector 상식

2024 대경권 대학생 프로그래밍 경진대회에서 생긴 이슈를 리뷰 해보았다.

vector 생성 방법

  1. 비어있는 vector 생성

     vector<int> vec;
    

    입력 → push_back 사용

     vec.push_back(a);
    
    • 메모리를 확보하면서(공간? 배열을 만들면서) 채워넣는 경우
  2. 크기 지정

     vector<int> vec(5); // 크기가 5이고 모든 값이 0인 벡터 생성
     vector<int> vec(5, 2); // 크기가 5이고 모든 값이 2인 벡터 생성
    

    입력 → index 사용

     cin >> vec[i];
    
    • 메모리 확보 후 차례대로 채워넣는 경우

Issue

vector<int> input(20);
for(int i=0;i<n;i++) {
    int value;
    cin >> value;
    input.push_back(value);
}
/*
7
1 5 6 7 2 3 4
[0, 0, 0, 0, 0, 0, 0]
*/

input vector의 size를 20을 주고 push_back을 하니 값이 안보임

for(int i=20;i<20+n;i++) {
    cout << result.at(i);
    if(i != n-1) cout << ", ";
}
/*
7
1 5 6 7 2 3 4
[1, 5, 6, 7, 2, 3, 4]
*/

20번째부터 출력을 하니 찾을 수 있었음

push_back

vector<int> input(20);
for(int i=0;i<n;i++) {
    int value;
    cin >> value;
    input.push_back(value);
}
  • 다음 코드의 경우 20의 크기가 할당되어 있기 때문에 0~19의 배열이 할당이 된 상태
  • push_back을 할 경우 맨뒤인 20번째부터 값이 들어간다.

또 다른 주의 사항

vector<int> input;
for(int i=0;i<n;i++) {
    int value;
    cin >> value;
    input[i] = value;
}
  • zsh: segmentation fault (에러 발생)
  • input = 아직 공간이 없는 벡터
  • 없는 공간을 접근하려고해서 에러가 발생

카테고리:

업데이트: