これはインタビューの質問です: STL リスト コンテナーを使用してループを作成する方法は?
私は初心者です。この質問を検索しましたが、何も見つかりませんでした。これが古い質問である場合は、リンクを教えてこの投稿を削除してください。
皆さん、ありがとうございました!
STL リスト コンテナーを使用してループを作成する方法は?
できません。
std::list
始まりと終わりがあります。データ構造へのすべてのアクセスは慎重に制御されるため、標準に準拠したプログラムは単純に非終了リストを作成できません。
Psstd::list
インタビュアーは実際には「STL リスト」ではなく 「 」と言うつもりだったと思います。
1 つの考えられる答えは次のとおりです。複数のスレッドがlist
同時に構造を操作している場合に発生する可能性があります。2 つのスレッドpush_back
が、既に形成されている に入れたいとしlist
ます。リストに既にb
とがある場合a
、循環リストは次のようになります。
.--------------------------.
( )
`-> a <-> SENTINEL <-> b <-'
そして、あるスレッドがc
同時に別のスレッドを挿入しd
ます。SENTINEL
彼らはそれぞれ、次のように の背面に取り付けたいと考えています。
a <-> c <-> SENTINEL
a <-> d <-> SENTINEL
ただし、ループが発生する可能性があります。
.------------.
a. `-. )
`-> c <-> d <-'
<--> SENTINEL <-> b (<-> a)
順方向リンクは問題ありませんb -> a -> c -> d
が、逆方向リンクはループします: d -> c -> d
...
これは、SENTINEL のポインターが相互排除なしで読み取られ、逆参照され、変更されているために発生する可能性があります。