본문 바로가기

ALGORITHM/코딩테스트를 위한 자료구조와 알고리즘 with c++ 정리

반복자 무효화

#include <iostream>
#include <list>
#include <vector>

int main()
{
	std::vector<int> vec = { 1,2,3,4,5 };

	auto v_it4 = vec.begin() + 4;

	vec.insert(vec.begin() + 2, 0);

	// ---------------------------

	std::list<int> lst = { 1,2,3,4,5 };

	auto l_it4 = next(lst.begin(), 4);

	lst.insert(next(lst.begin(), 2), 0);

}

벡터와 리스트의 반복자 무효화 비교

벡터는 원소를 추가할 때 용량을 초과하게 되면 벡터의 모든 원소를 새 메모리 공간으로 복사하는 동작이 발생합니다.

그렇기 떄문에 이전에 사용하던 반복자를 사용하게 되면 오류를 발생시키게 됩니다.

 

리스트의 경우에는 용량이 없고 새로운 값을 삽입해도 노드의 포인터를 바꿔주기 떄문에 리스트 원소들의 메모리 이동이 일어나지 않습니다. 그래서 반복자 무효화가 일어나지 않습니다.