C++ の std::list と例
std::list とは?
C++ では、std::list はストレージ コンテナーを参照します。 std:list を使用すると、どこからでもアイテムを挿入および削除できます。 std::list は、二重リンク リストとして実装されます。これは、リスト データに双方向かつシーケンシャルにアクセスできることを意味します。
標準テンプレート ライブラリ リストは高速ランダム アクセスをサポートしていませんが、すべての方向からのシーケンシャル アクセスをサポートしています。
リスト要素を異なるメモリ チャンクに分散させることができます。データへのシーケンシャル アクセスに必要な情報は、コンテナーに格納されます。 std::list は、実行時に必要に応じて両端から拡大および縮小できます。内部アロケーターは、ストレージ要件を自動的に満たします。
この C++ チュートリアルでは、次のことを学びます:
- std::list とは?
- なぜ std::list を使うのですか?
- リストの構文
- C++ リスト関数
- コンストラクター
- コンテナのプロパティ
- リストへの挿入
- リストから削除する
std::list を使用する理由
ここに std::List を使用する理由があります:
- std::list は、配列やベクトルなどの他のシーケンス コンテナーよりも優れています。
- どの位置からでも要素を挿入、移動、および抽出する際のパフォーマンスが向上します。
- std::list は、そのような操作を集中的に実行するアルゴリズムでもうまく機能します。
リストの構文
std::list を定義するには、 ヘッダー ファイルをインポートする必要があります。 std::list 定義の構文は次のとおりです:
template < class Type, class Alloc =allocator<T> > class list;
上記のパラメータの説明は次のとおりです:
- T – 含まれる要素のタイプを定義します。
T は、ユーザー定義型であっても、任意のデータ型で置き換えることができます。
- Alloc – アロケータ オブジェクトのタイプを定義します。
これは、デフォルトでアロケータ クラス テンプレートを使用します。これは値に依存し、単純なメモリ割り当てモデルを使用します。
例 1:
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; for (int x : my_list) { std::cout << x << '\n'; } }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>C++ リスト関数
一般的な std::list 関数は次のとおりです:
機能 説明 insert() この関数は、反復子が指す位置の前に新しい項目を挿入します。push_back() この関数は、リストの末尾に新しい項目を追加します。push_front() リストの前面に新しい項目を追加します。pop_front() リストの項目を削除しますfirst item.size()この関数は、リスト要素の数を決定します。front()リストの最初の項目を決定します。back()リストの最後の項目を決定します。reverse()リスト項目を逆にします。merge()2つをマージしますソートされたリスト。 コンストラクター
ヘッダー ファイルによって提供される関数のリストは次のとおりです。
- デフォルト コンストラクタ std::list::list() - 要素がゼロの空のリストを作成します。
- Fill コンストラクター std::list::list() - n 個の要素を持つリストを作成し、各要素にゼロ (0) の値を割り当てます。
- Range コンストラクタ std::list::list()- first から last までの範囲の多くの要素を持つリストを作成します。
- コピー コンストラクター std::list::list() - 既存のリストに含まれる各要素のコピーを含むリストを作成します。
- 移動コンストラクタ std::list::list() - 移動セマンティクスを使用して、別のリストの要素を持つリストを作成します。
- イニシャライザ リスト コンストラクタ std::list::list() - 移動セマンティクスを使用して、別のリストの要素を持つリストを作成します。
例 2:
#include <iostream> #include <list> using namespace std; int main(void) { list<int> l; list<int> l1 = { 10, 20, 30 }; list<int> l2(l1.begin(), l1.end()); list<int> l3(move(l1)); cout << "Size of list l: " << l.size() << endl; cout << "List l2 contents: " << endl; for (auto it = l2.begin(); it != l2.end(); ++it) cout << *it << endl; cout << "List l3 contents: " << endl; for (auto it = l3.begin(); it != l3.end(); ++it) cout << *it << endl; return 0; }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>コンテナ プロパティ
コンテナ プロパティのリストは次のとおりです:
プロパティ 説明 SequenceSequence コンテナは、要素を厳密な線形順序で並べます。要素は、シーケンス内の位置によってアクセスされます。二重にリンクされたリストすべての要素には、前の要素と次の要素を見つける方法に関する情報があります。これにより、挿入操作と削除操作に一定の時間を確保できます。アロケーター対応アロケーター オブジェクトは、ストレージ サイズを動的に変更するために使用されます。リストへの挿入
リストに値を挿入するために使用できるさまざまな関数があります。これを実演してみましょう:
例 3:
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; my_list.push_front(11); my_list.push_back(18); auto it = std::find(my_list.begin(), my_list.end(), 10); if (it != my_list.end()) { my_list.insert(it, 21); } for (int x : my_list) { std::cout << x << '\n'; } }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>リストからの削除
リストから項目を削除することができます。 erase() 関数を使用すると、リストからアイテムまたはアイテムの範囲を削除できます。
- 1 つのアイテムを削除するには、1 つの整数位置を渡すだけです。アイテムが削除されます。
- 範囲を削除するには、開始イテレータと終了イテレータを渡します。これを示しましょう。
例 4:
#include <algorithm> #include <iostream> #include <list> using namespace std; int main() { std::list<int> my_list = { 12, 5, 10, 9 }; cout << "List elements before deletion: "; for (int x : my_list) { std::cout << x << '\n'; } list<int>::iterator i = my_list.begin(); my_list.erase(i); cout << "\nList elements after deletion: "; for (int x : my_list) { std::cout << x << '\n'; } return 0; }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>まとめ:
- std::list はストレージ コンテナーです。
- いつでもどこからでもアイテムを挿入および削除できます。
- 二重リンクとして実装されています
- std::list データは、双方向および順次にアクセスできます。
- std::list は高速ランダム アクセスをサポートしていません。ただし、すべての方向からのシーケンシャル アクセスをサポートします。
- std::list のリスト要素を異なるメモリ チャンクに分散させることができます。
- 実行時に、必要に応じて両端から std::list を縮小または拡張できます。
- アイテムを std::list に挿入するには、insert() 関数を使用します。
- std::list から項目を削除するには、erase() 関数を使用します。
C言語