C++ リスト

目次

1. リストについて

2. 関連機能の一覧表示

3. 関連機能の利用

1. コンストラクター

2、プッシュバック

3. イテレータ

4、プッシュフロント

5、ポップバック

6、挿入

7、消去

イテレータの失敗問題について

8、スプライス

9、削除

10、仕分け


1. リストについて

リストは、文字列とベクトルと同様にコンテナであり、強い類似性を持っているため、文字列とベクトルを学習すると、リストも正確に使用できるようになります。

list は実際には主要な双方向循環リンク リストです

2. 関連機能の一覧表示

3. 関連機能の利用

リストの使用法は文字列やベクトルの使用法と似ていますが、理解しやすい簡単な例をいくつか示します。

1. コンストラクター

通常、最初の構築: パラメータなしの構築です。


2、プッシュバック

プッシュバックテールインサート


3. イテレータ

リストは文字列やベクトルとは異なります。連続した記憶領域がないため、[] を使用して走査することはできません。反復子を使用してのみ走査できます。

次のように:

もちろん、反復子をサポートしている場合は、range for もサポートされます。range for の最下層は反復子です。

前方反復子は上で説明されており、逆方向反復子も同じ方法で使用されます。


4、プッシュフロント

Push_front はヘッド挿入です (時間計算量は O(1))


5、ポップバック

Pop_back は末尾の削除です

元々は 4 3 2 1 でしたが、末尾を 2 回削除して 4 3 になりました。


6、挿入

insert はデータを挿入することです

1つ目は、posの位置にvalを挿入することです

2 つ目は、pos の位置に n 個の値を挿入することです。

3 番目の方法は、反復子の範囲を挿入することです。

また、挿入と消去は検索と組み合わせて使用​​されます。

また、vector と同様に、find はアルゴリズムのヘッダー ファイルに含まれていますが、find が見つからない場合は最後に返されるため、if 文を使用して見つかったかどうかを判断する必要があります。

つまり、以下に示すように、2 の前に 20 を挿入します。


7、消去

Eraseはデータを削除することです

また、erase が見つからなかった場合も最後に戻るので、insert と同様に if 文で判断する必要があります。

以下のように、2を削除します。


イテレータの失敗問題について

イテレータはポインタに似たもので、イテレータの失敗とは、対応するポインタが破壊されたにもかかわらず、破壊された領域がまだ使用されていることを意味します。

上記の挿入反復子と同様に、挿入は 2 より前の位置に挿入されるため、リンクされたリストにノードを追加するだけで、それらの関係は変更されず、ポインタが指す空間は破壊されないため、無効ではありません。

消去 2 の後、ノード 2 の位置は解放されたものの、ポインタはその位置を指したままであるため、イテレータの失敗の問題が発生しました。これを使用し続けると、次のようにプログラムがクラッシュします。

2 は pos 位置で削除されました。これは、pos が指す位置が解放され、pos は引き続き pos 位置の値を変更するために使用されることを意味します。

実行すると、次のエラーが報告されます。

これは典型的な反復子の失敗の問題です


8、スプライス

スプライスはデータを転送することです

最初の使用法のみをリストします。これは、x リンクされたリストの内容を pos 位置に転送することです。

2 つの連結リストがあり、1 つの連結リスト l は 1 2 3 4、もう 1 つの連結リスト r は 5 6 7 です。l の連結リストの位置、つまり 2 番目のデータの位置を見つけて、全体を転送します。 r この位置にリンクされたリスト データがあるため、 1 5 6 7 2 3 4 となりました。


9、削除

削除は、値 val のデータを削除することです。

リンクされたリスト 1 2 3 4 4 4 があるので、(4) を削除します。

結果を観察すると、remove は値 4 を持つすべての数値を削除することがわかります。


10、仕分け

sort は並べ替えアルゴリズムです

Vector で述べたように、ヘッダー ファイルのアルゴリズムにはソート アルゴリズムもありますが、なぜリストに独自のソート アルゴリズムが必要なのでしょうか。

理由は非常に簡単です。アルゴリズム ヘッダー ファイルの並べ替えは、連続ストレージ スペースを持つコンテナーのみをサポートします。並べ替えアルゴリズムの並べ替えは実​​際にはクイック ソートですが、リスト ストレージ スペースはそうではないため、自分で実装する必要があるからです。 。

l.sort() を使用するだけです。デフォルトは昇順です。

降順で並べ替えたい場合は、sort の 2 番目の使用法、つまりファンクター関数を渡します。

昇順のファンクターは小さく、降順のファンクターは大きくなりますが、大きいものを使用する場合は、ヘッダー ファイル関数を含める必要があります。

以下の図に示すように、匿名オブジェクトを渡すだけです。

おすすめ

転載: blog.csdn.net/m0_64411530/article/details/132859481