반응형
forward_list
forward_list
는 단일 연결 리스트를 구현한 컨테이너입니다.list
와 비슷하지만, 양방향 링크 대신에 단일 방향 링크만을 제공합니다.
주요 특징
- 단일 방향 연결 리스트 : 각 노드는 다음 노드에 대한 포인터만 가지고 있어, 반대 방향으로는 탐색할 수 없습니다.
- 더 적은 메모리 사용 : 각 노드에서 이전 노드에 대한 포인터가 없기 때문에, 메모리 사용량이
list
보다 적습니다. - 비순차적 저장 : 요소가 메모리 내에서 불규칙하게 저장되며, 중간에 삽입하거나 삭제할 때 효율적입니다.
- 랜덤 액세스 없음 : 임의 접근이 불가능하므로, 인덱스를 통해 요소에 접근할 수 없습니다. 요소에 접근하려면 순차적으로 탐색해야 합니다.
선언
#include<forward_list>
std::forward_list< int > flist;
// example
std::forward_list< int > flist = {1, 2, 3, 4, 5}; // 크기가 5인 forward list, 초기값 등록
std::forward_list< int > flist(10); // 크기가 10인 forward list, 기본값으로 초기화
std::forward_list< int > flist(10, 4); // 크기가 10인 forward list, 4로 초기화
함수
Iterators
함수 | 설명 |
begin() |
첫번째 원소를 가리키는 iterator를 반환 |
end() |
마지막 원소의 다음을 가리키는 iterator를 반환 |
cbegin() |
첫번째 원소를 가리키는 상수 iterator를 반환 |
cend() |
마지막 원소의 다음을 가리키는 상수 iterator를 반환 |
rbegin() |
역 순차열의 첫 번째 원소를 가리키는 iterator를 반환 |
rend() |
역 순차열의 마지막 원소의 다음을 가리키는 iterator를 반환 |
crbegin() |
역 순차열의 첫 번째 원소를 가리키는 상수 iterator를 반환 |
crend() |
역 순차열의 마지막 원소의 다음을 가리키는 상수 iterator를 반환 |
기타 접근 또는 사용 관련
함수 | 설명 |
front() |
첫번째 원소의 값 |
empty() |
비어있다면 true, 아니라면 false 반환 |
push_front(T value) |
리스트 맨 앞에 원소 추가 |
pop_front() |
리스트 맨 앞의 원소 삭제 |
insert_after(iterator it, T value) |
iterator가 가리키는 부분의 다음에 원소 추가 |
erase_after(iterator first, [iterator last]) |
선택한 위치 다음의 원소 삭제, last iterator도 붙이면 그 범위의 원소 삭제 |
사용 예시
#include <iostream>
#include <forward_list>
using namespace std;
int main(void) {
forward_list< int > flist;
for (int i = 0; i < 5; i++)
flist.push_front(i + 1);
// iterator 선언
forward_list<int>::iterator it;
//// 반복문 출력
for (auto it = flist.begin(); it != flist.end(); it++)
cout << *it << " ";
cout << endl;
cout << endl;
// 데이터 삽입
flist.push_front(6);
flist.emplace_front(7);
for (auto it = flist.begin(); it != flist.end(); it++)
cout << *it << " ";
cout << endl;
cout << endl;
// 데이터 중간 삽입
flist.insert_after(++flist.begin(), -1);
flist.emplace_after(++flist.begin(), -2);
for (auto it = flist.begin(); it != flist.end(); it++)
cout << *it << " ";
cout << endl;
cout << endl;
// 데이터 삭제
flist.pop_front();
for (auto it = flist.begin(); it != flist.end(); it++)
cout << *it << " ";
cout << endl;
cout << endl;
flist.erase_after(flist.begin());
for (auto it = flist.begin(); it != flist.end(); it++)
cout << *it << " ";
cout << endl;
cout << endl;
}
반응형
'IT > Programming Language' 카테고리의 다른 글
[C++/STL] STL 사용법 : Container - List (0) | 2025.02.23 |
---|---|
[C++/STL] STL 사용법 : Container - Deque (0) | 2025.02.23 |
[C++/STL] STL 사용법 : Container - Vector (0) | 2025.02.15 |
[C++/STL] STL 사용법 : Container - Array (0) | 2025.02.15 |
[Java] 어노테이션 (Annotation) (0) | 2025.02.09 |