'iterator'에 해당되는 글 1건

  1. 2019.09.15 Visual Studio와 erase 함수
2019. 9. 15. 05:08
728x90

erase를 사용할 때는 erase로 반환되는 iterator를 변수에 대입해야 합니다.
erase(it)를 했다고 it가 자동으로 갱신되는게 아니라 it = erase(it)로 대입을 해줘야 합니다.
erase를 할 경우 iterator 변수는 empty 상태로 변경되기 때문입니다.

Visual Studio에서는 조사식으로 확인할 때 이 iterator의 값이 empty로 표기되지 않고 
삭제한 결과에 맞게 자동으로 갱신된 것처럼 표기됩니다.


erase를 하기 전의 상태
it는 nums[1]을 가리키고 있는 상태이며, 조사식에도 it의 [ptr]이 &nums[1]과 같은 것을 볼 수 있습니다.



erase를 하고 난 후의 상태
it도 갱신되고 [ptr]도 &nums[1]의 것과 동일한 것으로 출력됩니다.


하지만 막상 iterator 변수를 참조하려고 하는 순간 런타임 에러가 발생합니다.


Leetcode 문제를 풀다 iterator 사용법을 헷갈려하여 잠시 헤맸던 상황이었고
혹시 저와 같은 문제로 고생 중인 분이 있을 수도 있기에 포스팅으로 남깁니다.


for (auto it = nums.begin() + 1; it != nums.end();)
{
	if (*it == *(it - 1))
	{
		nums.erase(it);		// 이러면 it 참조 시 에러 발생
		it = nums.erase(it);	// it를 계속 사용할 거라면 이렇게.
	}
	else
	{
		it++;
	}
}
728x90
Posted by 아야카