while (1): study();

[C++] 벡터에 원소가 삽입되지 않을때 본문

학습/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
Comments