C++/標準ライブラリ/forward list
表示
<forward_list>
ヘッダーは、単方向リストを提供します。単方向リストは、前の要素へのポインタを持たないため、メモリ使用量が少なくて済む一方で、逆方向への走査ができないという特徴があります。
- インクルードディレクティブ
#include <compare> // see 17.11.1 #include <initializer_list> // see 17.10.2
- 名前空間
std
の定義 namespace std {
- テンプレートクラス
forward_list
の定義 template<class T, class Allocator = allocator<T>> class forward_list;
- 等価比較演算子
template<class T, class Allocator> bool operator==(const forward_list<T, Allocator>& x, const forward_list<T, Allocator>& y);
- 3方向比較演算子(宇宙船演算子)
template<class T, class Allocator> synth-three-way-result <T> operator<=>(const forward_list<T, Allocator>& x, const forward_list<T, Allocator>& y);
- スワップ関数
template<class T, class Allocator> void swap(forward_list<T, Allocator>& x, forward_list<T, Allocator>& y) noexcept(noexcept(x.swap(y)));
- 要素削除関数
template<class T, class Allocator, class U> typename forward_list<T, Allocator>::size_type erase(forward_list<T, Allocator>& c, const U& value); template<class T, class Allocator, class Predicate> typename forward_list<T, Allocator>::size_type erase_if(forward_list<T, Allocator>& c, Predicate pred);
- PMR(Polymorphic Memory Resource)サポート
namespace pmr { template<class T> using forward_list = std::forward_list<T, polymorphic_allocator<T>>; }
コード例
[編集]以下は、C++のforward_list
を使用した簡単なコード例です。この例では、forward_list
にいくつかの要素を追加し、それらの要素を出力し、要素の削除と条件付き削除を行います。
#include <forward_list> #include <iostream> #include <iterator> // ヘルパー関数:forward_listの内容を出力する template <typename T> void print_forward_list(const std::forward_list<T>& flist) { for (const auto& elem : flist) { std::cout << elem << " "; } std::cout << std::endl; } auto main() -> int { // forward_listの宣言と初期化 auto flist = std::forward_list{1, 2, 3, 4, 5}; std::cout << "Initial forward_list: "; print_forward_list(flist); // 要素の追加 flist.push_front(0); // 先頭に0を追加 std::cout << "After push_front: "; print_forward_list(flist); // 特定の要素の削除 flist.remove(3); // 3を削除 std::cout << "After remove(3): "; print_forward_list(flist); // 条件付き削除 flist.remove_if([](int x) { return x % 2 == 0; }); // 偶数の要素を削除 std::cout << "After remove_if: "; print_forward_list(flist); // イテレータを使って要素を追加 auto it = flist.begin(); std::advance(it, 1); // 2番目の位置にイテレータを進める flist.insert_after(it, 9); // 2番目の位置の後に9を追加 std::cout << "After insert_after: "; print_forward_list(flist); return 0; }
コードの説明
[編集]- インクルードディレクティブ
#include <forward_list>
:forward_list
を使用するためのヘッダー。#include <iostream>
: 標準入出力を扱うヘッダー。#include <iterator>
: イテレータを使用するためのヘッダー。- ヘルパー関数
print_forward_list
は、forward_list
の要素を順に出力するための関数です。main
関数std::forward_list<int> flist = {1, 2, 3, 4, 5};
で初期化されたforward_list
を宣言。flist.push_front(0);
でリストの先頭に要素0
を追加。flist.remove(3);
でリストから要素3
を削除。flist.remove_if([](int x) { return x % 2 == 0; });
でリストから偶数の要素を削除。auto it = flist.begin();
でイテレータを取得し、std::advance(it, 1);
で2番目の位置に進め、flist.insert_after(it, 9);
でその位置の後に要素9
を追加。
このコード例は、forward_list
の基本的な操作(要素の追加、削除、条件付き削除)を示しており、リストのイテレータを用いた操作も含んでいます。