더북(TheBook)

std::forward_liststd::vectoremplace() 함수와 유사한 emplace_front()emplace_after() 함수도 제공합니다. 이 두 함수는 삽입 함수와 같은 기능을 수행하지만 추가적인 복사 또는 이동을 하지 않기 때문에 더 효율적입니다.

std::forward_list에서 원소를 삭제할 때에는 pop_front()erase_after() 함수를 사용합니다. pop_front() 함수는 리스트의 맨 처음 원소를 제거합니다. 이 작업은 원소 이동이 필요하지 않으므로 매우 빠르게 동작하며 시간 복잡도는 O(1)입니다. erase_after()는 두 가지 형태로 제공됩니다. 하나는 특정 원소를 가리키는 반복자를 인자로 받아서 바로 다음 위치의 원소를 삭제합니다. 일련의 원소를 제거할 때에도 erase_after() 함수를 사용할 수 있으며, 이 경우에는 삭제할 범위의 시작 원소 앞을 가리키는 반복자와 삭제할 범위 끝 원소를 가리키는 반복자를 인자로 받습니다.

erase_after() 함수를 사용하여 일련의 원소를 삭제하는 시간 복잡도는 삭제할 원소 개수의 선형 함수 형태로 나타납니다. 이는 연결 리스트에서 각각의 노드는 전체 메모리의 임의 위치에 산재되어 있으며, 각각의 노드에 사용된 메모리를 개별적으로 해제해야 하기 때문입니다.

리스트에서 원소를 삭제하는 코드 예제를 살펴보겠습니다.

std::forward_list<int> fwd_list = {1, 2, 3, 4, 5};

fwd_list.pop_front();     // 맨 앞 원소를 삭제: {2, 3, 4, 5}

auto it = fwd_list.begin();

fwd_list.erase_after(it); // 맨 앞의 다음 원소를 삭제: {2, 4, 5}

fwd_list.erase_after(it, fwd_list.end());
// 맨 앞 원소 다음부터 맨 마지막 원소까지 삭제: {2}

다음 절에서 std::forward_list를 이용하여 수행할 수 있는 연산에 대해 좀 더 살펴보겠습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.