C++/STL 컨테이너

STL 컨테이너 - forward_list

coding-potato 2025. 1. 7. 18:28

forward_list

C++에서 std::forward_list는 C++ 표준 라이브러리의 컨테이너 중 하나로, 단방향 연결 리스트를 구현합니다. std::list와 비슷하지만, forward_list는 양방향 링크를 지원하지 않으며, 더 효율적인 메모리 사용과 속도를 제공합니다.

 

1. forward_list의 특징

  • 단방향 연결 리스트
    • 요소들은 한 방향으로만 연결됩니다. 즉, 이전 요소로 이동할 수 없고, 오직 다음 요소로만 접근 가능합니다.
  • 메모리 효율
    • 각 요소가 단일 연결만 필요하므로 std::list에 비해 메모리 오버헤드가 적습니다.
  • 빠른 삽입 및 삭제
    • 특히, 리스트의 앞부분에서의 삽입과 삭제가 매우 빠릅니다. 하지만 중간이나 끝에서의 삽입, 삭제는 std::list보다 느릴 수 있습니다.

2. #include <forward_list>

std::forward_list를 사용하려면 <forward_list> 헤더 파일을 포함해야 합니다.

3. 선언 및 초기화

forward_list는 템플릿 클래스로 사용됩니다. 템플릿 파라미터로 저장할 값의 타입을 지정합니다.

forward_list는 주로 초기화 리스트를 통해 빠르게 초기화할 수 있습니다.

4. 주요 멤버 함수

forward_list는 back(), push_back(), pop_back() 함수를 사용 할 수 없습니다.

1) 기본 멤버 함수

  • begin() : 첫 번째 요소를 가리키는 반복자를 반환합니다.
  • end() : 마지막 요소 뒤를 가리키는 반복자를 반환합니다.
  • empty() : 리스트가 비어 있으면 true, 아니면 false를 반환합니다.
  • front() : 리스트의 첫 번째 요소를 반환합니다.

2) 수정 함수

  • push_front(const T& val) : 리스트의 앞에 값을 추가합니다.
  • pop_front() : 리스트의 첫 번째 요소를 삭제합니다.
  • insert_after(const_iterator pos, const T& val) : 지정된 위치 뒤에 요소를 삽입합니다.
  • erase_after(const_iterator pos) : 지정된 위치 뒤의 요소를 삭제합니다.
  • clear() : 리스트의 모든 요소를 삭제합니다.

3) 기타 유용한 함수

  • resize(size_t n) : 리스트의 크기를 변경합니다.
  • splice_after(const_iterator pos, forward_list& other) : other 리스트의 요소들을 지정된 위치 뒤에 삽입합니다.
  • remove(const T& val) : 리스트에서 특정 값을 모두 제거합니다.

예시 코드:

#include <forward_list>
#include <iostream>

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

    // 첫 번째 요소 출력
    std::cout << "Front: " << flist.front() << std::endl;

    // 리스트 앞에 0 추가
    flist.push_front(0);
    std::cout << "After push_front: ";
    for (int val : flist) {
        std::cout << val << " ";
    }
    std::cout << std::endl;

    // 리스트에서 2 제거
    flist.remove(2);
    std::cout << "After remove(2): ";
    for (int val : flist) {
        std::cout << val << " ";
    }
    std::cout << std::endl;

    // 첫 번째 요소 삭제
    flist.pop_front();
    std::cout << "After pop_front: ";
    for (int val : flist) {
        std::cout << val << " ";
    }
    std::cout << std::endl;

    return 0;
}

 

이 코드는 forward_list의 다양한 함수들을 사용하는 방법을 보여줍니다. std::forward_list는 비교적 간단한 사용법을 제공하며, 특히 빠른 삽입과 삭제가 중요한 상황에서 유용합니다.

'C++ > STL 컨테이너' 카테고리의 다른 글

STL 컨테이너 - unordered_map  (0) 2025.01.08
STL 컨테이너 - set  (0) 2025.01.07
STL 컨테이너 - deque  (0) 2025.01.07
STL 컨테이너 - priority_queue  (0) 2025.01.07
STL 컨테이너 - queue  (0) 2025.01.07