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 |