Program Language/C & C++

[C++] STL map에서 erase 사용 시 주의점

야곰야곰+책벌레 2023. 8. 24. 12:17
728x90
반응형
	for (auto itr = m_elems.begin(); itr != m_elems.end(); ++itr)
	{
		if (itr->second->locking && !ignore_locked_obj)
			continue;
		m_elems.erase(itr);
	}

map을 사용하여 조건을 통한 삭제를 실행하려 했는데, runtime error가 발생한다. 조건을 만족하는 iterator가 나타났을 때 해당 iterator를 지워버리면 해당 iterator는 end가 되어 버렸다. erase 하면 pos 값이 날아가버려서 그런가 보다. 미리 복사해 둬야 에러를 발생시키지 않는다.

	for (auto itr = m_elems.begin(); itr != m_elems.end();)
	{
		if (itr->second->locking && !ignore_locked_obj)
			++itr;
		else
			m_elems.erase(itr++);
	}

이렇게 고치니까 에러가 나질 않는다.

728x90
반응형