while (1): study();
[C++] 벡터에 원소가 삽입되지 않을때 본문
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
'학습 > C, C++' 카테고리의 다른 글
error LNK2019 해결법 (0) | 2021.12.24 |
---|---|
[C++] 복사생성자의 호출 시기 (0) | 2021.12.20 |
[C++]'const char [14]'에서 'char *'(으)로 변환할 수 없습니다. (0) | 2021.12.19 |
[C++] 정보은닉과 캡슐화 (0) | 2021.12.19 |
구조체에 대한 new & delete 연산 (0) | 2021.12.19 |