티스토리 뷰
std::forward_list는 C++ 표준 라이브러리의 일부로, 단방향 연결 리스트를 구현하고 있다. 각 원소는 다음 원소를 가리키는 포인터를 포함하며, 이 구조는 원소의 삽입과 삭제를 유연하게 만든다.
초기화 및 원소 셋팅
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> flist; // 빈 forward_list 생성
// 원소 삽입
flist.push_front(1);
flist.push_front(2);
flist.push_front(3);
// 출력
for (int n : flist) {
std::cout << n << ' ';
}
std::cout << '\n';
}
원소 삽입
- insert_after() 함수는 삽입할 위치를 나타내는 반복자와 삽입할 원소를 인자로 받는다. 이 함수는 지정된 위치의 바로 다음에 새로운 원소를 삽입한다. 반복자를 활용하여 리스트 내 특정 위치에 원소를 추가할 수 있다.
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> flist = {1, 2, 3};
auto it = flist.begin(); // 첫 번째 원소를 가리키는 반복자
// 첫 번째 원소 뒤에 4 삽입
flist.insert_after(it, 4);
for (int n : flist) {
std::cout << n << ' ';
}
std::cout << '\n';
}
>> 1 4 2 3
- emplace_after()는 새로운 원소를 생성하여 직접 삽입하는 기능을 제공한다. insert_after()와 유사하지만, emplace_after()는 원소를 먼저 생성하지 않고, 지정된 위치에 바로 원소를 구성한다. 이는 성능 면에서 유리하다.
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> flist = {1, 2, 3};
auto it = flist.begin();
// 첫 번째 원소 뒤에 직접 4 생성하여 삽입
flist.emplace_after(it, 4);
for (int n : flist) {
std::cout << n << ' ';
}
std::cout << '\n';
}
>> 1 4 2 3
원소 삭제
- erase_after() 함수는 특정 위치의 다음 원소를 삭제한다. 삭제할 원소의 바로 앞 원소를 가리키는 반복자를 인자로 받아, 그 다음 원소를 제거한다.
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> flist = {1, 2, 3, 4};
// 첫 번째 원소 뒤의 원소 삭제
flist.erase_after(flist.begin());
for (int n : flist) {
std::cout << n << ' ';
}
std::cout << '\n';
}
>> 1 3 4
- pop_front() 함수는 리스트의 첫 번째 원소를 제거한다. 단방향 리스트의 특성 상, 첫 원소를 제외한 다른 위치의 원소를 직접 삭제하는 함수는 제공하지 않는다.
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> flist = {1, 2, 3};
// 첫 번째 원소 삭제
flist.pop_front();
for (int n : flist) {
std::cout << n << ' ';
}
std::cout << '\n';
}
>> 2 3
기타 자주 사용되는 멤버 함수들
- clear() 함수는 리스트의 모든 원소를 삭제한다.
- empty() 함수는 리스트가 비어 있는지 여부를 반환한다.
- front() 함수는 리스트의 첫 번째 원소에 대한 참조를 반환한다.
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> flist = {1, 2, 3};
// 리스트가 비어있는지 확인
if (!flist.empty()) {
std::cout << "첫 번째 원소: " << flist.front() << '\n';
}
// 모든 원소 삭제
flist.clear();
// 리스트가 비어있는지 다시 확인
if (flist.empty()) {
std::cout << "리스트가 비어있습니다." << '\n';
}
}
- assign() 함수는 리스트에 새로운 내용을 할당한다. 범위 또는 초기화 목록을 이용하여 리스트의 내용을 대체할 수 있다.
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> flist;
// assign을 사용하여 새 원소 할당
flist.assign({4, 3, 2, 1});
for (int n : flist) {
std::cout << n << ' ';
}
std::cout << '\n';
}
>> 4 3 2 1
- sort() 함수는 리스트의 원소를 정렬한다.
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> flist = {4, 1, 3, 2};
// 리스트 정렬
flist.sort();
for (int n : flist) {
std::cout << n << ' ';
}
std::cout << '\n';
}
>> 1 2 3 4
- merge() 함수는 다른 forward_list와 합병한다. 두 리스트는 사전에 정렬되어 있어야 한다.
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> flist1 = {1, 3, 5};
std::forward_list<int> flist2 = {2, 4, 6};
flist1.sort();
flist2.sort();
// flist1과 flist2 합병
flist1.merge(flist2);
for (int n : flist1) {
std::cout << n << ' ';
}
std::cout << '\n';
}
>> 1 2 3 4 5 6
- reverse() 함수는 리스트의 원소 순서를 반전시킨다.
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> flist = {1, 2, 3, 4};
// 리스트 원소 순서 반전
flist.reverse();
for (int n : flist) {
std::cout << n << ' ';
}
std::cout << '\n';
}
>>4 3 2 1
이러한 기능들 덕분에 std::forward_list는 유연성과 효율성을 제공하며, 특히 원소의 삽입과 삭제가 자주 발생하는 상황에서 유용하게 사용될 수 있다.
반응형
'C++ > 참고' 카테고리의 다른 글
[C++] std::deque & std:stack (2) | 2024.01.04 |
---|---|
[C++] std::vector (0) | 2023.12.18 |
[C++] 문법: 후행타입반환 (0) | 2023.12.17 |
[C++] 문법: 범위 지정 연산자와 점 연산자 차이 (0) | 2023.12.17 |
[C++] 문법: 범용 참조 (Args&&... args) (0) | 2023.12.17 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- react
- Async
- 맛집
- javascript
- 정보보안기사 #실기 #정리
- 이탈리안 레스토랑
- Promise
- 파니노구스토
- react-native
- 인천 구월동 이탈리안 맛집
- redux
- await
- redux-thunk
- AsyncStorage
- 인천 구월동 맛집
- Total
- Today
- Yesterday