[c++] vector 선언 및 입력
나만 몰랐었던 vector 상식
2024 대경권 대학생 프로그래밍 경진대회에서 생긴 이슈를 리뷰 해보았다.
vector 생성 방법
-
비어있는 vector 생성
vector<int> vec;
입력 → push_back 사용
vec.push_back(a);
- 메모리를 확보하면서(공간? 배열을 만들면서) 채워넣는 경우
-
크기 지정
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 = 아직 공간이 없는 벡터
- 없는 공간을 접근하려고해서 에러가 발생