リストは順序です コンテナ これにより、不連続なメモリ割り当てが可能になります。ベクトルと比較すると、リストの走査は遅いですが、一度位置が見つかると、挿入と削除は迅速に (一定時間) 行われます。通常、リストというときは、 二重リンクリスト 。単一リンクリストを実装するには、 forward_list 。
std::リスト リストコンテナのクラスです。これは C++ 標準テンプレート ライブラリ (STL) の一部であり、内部で定義されています。 ヘッダファイル。
構文:
トーチの取り付け
std::list name_of_list;>
例:
C++
// C++ program to demonstrate the use of list containers> #include> #include> using> namespace> std;> int> main()> {> >// defining list> >list<>int>>gqlist{12,45,8,6};>> >for> (>auto> i : gqlist) {> >cout << i <<>' '>;> >}> >return> 0;> }> |
クイックソート
>
>出力
Java文字列cmp
12 45 8 6>
上の例では、という名前の std::list オブジェクトを作成しました。 gqリスト そしてinitializer_listを使用して初期化しました。前述したさまざまな方法を使用して std::list オブジェクトを初期化できます。 ここ。
std::list の基本操作
- フロント() – リストの最初の要素の値を返します。
- 戻る() – リストの最後の要素の値を返します。
- プッシュ_フロント() – リストの先頭に新しい要素「g」を追加します。
- プッシュバック() – リストの最後に新しい要素「g」を追加します。
- ポップフロント() – リストの最初の要素を削除し、リストのサイズを 1 減らします。
- ポップバック() – リストの最後の要素を削除し、リストのサイズを 1 減らします。
- 入れる() – リスト内の指定された位置の要素の前に新しい要素を挿入します。
- サイズ() – リスト内の要素の数を返します。
- 始める() – begin() 関数は、リストの最初の要素を指す反復子を返します。
- 終わり() – end() 関数は、最後の要素に続く理論上の最後の要素を指す反復子を返します。
以下の例は、C++ でのリスト コンテナーとその基本関数の一般的な使用法を示しています。
例:
C++
Javaのif else文
// C++ program to demonstrate the implementation of List> #include> #include> #include> using> namespace> std;> // function for printing the elements in a list> void> showlist(list<>int>>g)> {> >list<>int>>::それを反復処理します;>>' (it = g.begin(); it != g.end(); ++it)> >cout <<>' '> << *it;> >cout <<>'
'>;> }> // Driver Code> int> main()> {> >list<>int>>gqlist1、gqlist2;>>' (>int> i = 0; i <10; ++i) {> >gqlist1.push_back(i * 2);> >gqlist2.push_front(i * 3);> >}> >cout <<>'
List 1 (gqlist1) is : '>;> >showlist(gqlist1);> >cout <<>'
List 2 (gqlist2) is : '>;> >showlist(gqlist2);> >cout <<>'
gqlist1.front() : '> << gqlist1.front();> >cout <<>'
gqlist1.back() : '> << gqlist1.back();> >cout <<>'
gqlist1.pop_front() : '>;> >gqlist1.pop_front();> >showlist(gqlist1);> >cout <<>'
gqlist2.pop_back() : '>;> >gqlist2.pop_back();> >showlist(gqlist2);> >cout <<>'
gqlist1.reverse() : '>;> >gqlist1.reverse();> >showlist(gqlist1);> >cout <<>'
gqlist2.sort(): '>;> >gqlist2.sort();> >showlist(gqlist2);> >return> 0;> }> |
>
>
Javaは文字列を追加します出力
List 1 (gqlist1) is : 0 2 4 6 8 10 12 14 16 18 List 2 (gqlist2) is : 27 24 21 18 15 12 9 6 3 0 gqlist1.front() : 0 gqlist1.back() : 18 gqlist1.pop_front() : 2 4 6 8 10 12 14 16 18 gqlist2.pop_back() : 27 24 21 18 15 12 9 6 3 gqlist1.reverse() : 18 16 14 12 10 8 6 4 2 gqlist2.sort(): 3 6 9 12 15 18 21 24 27>
上記の例は、std::list とそのメンバー関数の一般的な使用法のみを示しています。以下の表に、std::list クラスのすべてのメンバー関数とその詳細な説明へのリンクを示します。
std::list メンバー関数
| 機能 | 意味 |
|---|---|
| フロント() | リストの最初の要素の値を返します。 |
| 戻る() | リストの最後の要素の値を返します。 |
| プッシュフロント(g) | リストの先頭に新しい要素「g」を追加します。 |
| プッシュバック(g) | リストの最後に新しい要素「g」を追加します。 |
| ポップフロント() | リストの最初の要素を削除し、リストのサイズを 1 減らします。 |
| ポップバック() | リストの最後の要素を削除し、リストのサイズを 1 減らします。 |
| リスト::begin() | begin() 関数は、リストの最初の要素を指す反復子を返します。 |
| リスト::end() | end() 関数は、最後の要素に続く理論上の最後の要素を指す反復子を返します。 |
| rbegin() と rend() をリストします。 | rbegin() は、リストの最後の要素を指す逆反復子を返します。 rend() は、リストの先頭より前の位置を指す逆反復子を返します。 |
| cbegin() と cend() をリストします。 | cbegin() は、リストの先頭を指す定数ランダム アクセス反復子を返します。 cend() は、リストの末尾を指す定数のランダム アクセス反復子を返します。 |
| crbegin() と crend() をリストします。 | crbegin() は、リストの最後の要素、つまりコンテナの逆の先頭を指す定数逆反復子を返します。 crend() は、リストの最初の要素に先行する理論上の要素、つまりリストの逆端を指す定数逆反復子を返します。 |
| 空の() | リストが空(1)であるか空でない(0)かを返します。 |
| 入れる() | リスト内の指定された位置の要素の前に新しい要素を挿入します。 |
| 消去() | リストから単一の要素または要素の範囲を削除します。 |
| 割当() | 現在の要素を置換し、リストのサイズを変更することにより、リストに新しい要素を割り当てます。 |
| 取り除く() | 指定された要素と等しいすべての要素をリストから削除します。 |
| list::remove_if() | 関数のパラメーターとして指定された述語または条件に true に対応するすべての値をリストから削除するために使用されます。 |
| 逆行する() | リストを反転します。 |
| サイズ() | リスト内の要素の数を返します。 |
| リストのサイズ変更() | リストコンテナのサイズを変更するために使用されます。 |
| 選別() | リストを昇順に並べ替えます。 |
| リストの最大サイズ() | リスト コンテナーが保持できる要素の最大数を返します。 |
| ユニークなリスト() | 重複する連続要素をすべてリストから削除します。 |
| list::emplace_front() および list::emplace_back() | .emplace_front() 関数は、リスト コンテナーに新しい要素を挿入し、リストの先頭にオブジェクトをインプレースで構築するために使用されます。 。 emplace_back() 関数は、リスト コンテナに新しい要素を挿入するために使用され、リストの最後にオブジェクトをインプレースで構築します。 |
| リスト::クリア() | clear() 関数は、リスト コンテナーのすべての要素を削除するために使用され、サイズ 0 になります。 |
| リスト::演算子= | この演算子は、既存のコンテンツを置き換えることによって、新しいコンテンツをコンテナに割り当てるために使用されます。 |
| リスト::スワップ() | この関数は、あるリストの内容を別のリストと交換するために使用されます。 |
| リストスプライス() | あるリストから別のリストに要素を転送するために使用されます。 |
| リストマージ() | 2 つのソートされたリストを 1 つにマージします。 |
| リスト emplace() | 指定された位置に新しい要素を挿入してリストを拡張し、リストの先頭にインプレースでオブジェクトを構築します。コピー操作を回避することでパフォーマンスが向上する可能性があります。 |
リストコンテナの注意点
- これは通常、両方向の走査を行う動的二重リンク リストを使用して実装されます。
- 配列やベクトルと比較して、挿入および削除操作が高速になります。
- 順次アクセスのみを提供します。中間要素へのランダムアクセスは不可能
- テンプレートとして定義されているため、あらゆるデータ型を保持できます。
- これは、ソートされていないリストと同じように動作します。これは、デフォルトではリストの順序が保持されないことを意味します。ただし、並べ替えにはテクニックがあります。