0

これはインタビューの質問です: STL リスト コンテナーを使用してループを作成する方法は?

私は初心者です。この質問を検索しましたが、何も見つかりませんでした。これが古い質問である場合は、リンクを教えてこの投稿を削除してください。

皆さん、ありがとうございました!

4

2 に答える 2

2

STL リスト コンテナーを使用してループを作成する方法は?

できません。

std::list始まりと終わりがあります。データ構造へのすべてのアクセスは慎重に制御されるため、標準に準拠したプログラムは単純に非終了リストを作成できません。

Psstd::listインタビュアーは実際には「STL リスト」ではなく 「 」と言うつもりだったと思います。

于 2012-08-10T16:08:16.080 に答える
1

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 のポインターが相互排除なしで読み取られ、逆参照され、変更されているために発生する可能性があります。

于 2012-08-10T16:10:54.813 に答える