학습/C, C++
[C++] 벡터에 원소가 삽입되지 않을때
전국민실업화
2022. 1. 4. 17:37
728x90
비트마스크를 입력받는 예제가 있다.
vector<bitset<MAX_N>> getBitmask(vector<bitset<MAX_N>> bitmasks, const int length)
{
for (int n = 0; n < length; n++)
{
int numElem;
int elem;
scanf("%d", &numElem);
bitset<MAX_N> bitmask;
for (int e = 0; e < numElem; e++)
{
scanf("%d", &elem);
bitmask.set(elem, 1);
}
bitmasks.push_back(bitmask);
}
return bitmasks;
}
이때 반환형이 void이든 벡터이든 결과의 size()를 호출하면 0이 나온다. 이후 빈 벡터에 대해 연산을 가하면 vector subscript out of range 등의 에러를 만날 수 있다.
courses = getBitmask(courses, M);
printf("%d", courses.size());
// 결과 0
이런 경우 함수의 인자로 주어지는 벡터를 참조체로 설정하면 된다.
void getBitmask(vector<bitset<MAX_N>>& bitmasks, const int length)
{
for (int n = 0; n < length; n++)
{
int numElem;
int elem;
scanf("%d", &numElem);
bitset<MAX_N> bitmask;
for (int e = 0; e < numElem; e++)
{
scanf("%d", &elem);
bitmask.set(elem, 1);
}
bitmasks.push_back(bitmask);
}
}
정상적인 결과를 확인할 수 있다.
courses = getBitmask(courses, M);
printf("%d", courses.size());
// 결과 4
728x90