問題タブ [stdlist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
548 参照

c++ - リストサイズ1のstd::list消去を正しく処理する

次のことを考慮してください。

これは、である限り正常に機能しlist.size() > 1ます。リストに要素が1つだけ含まれると、segfaultを消去するための呼び出し。次の要素がないので想定しています。少なくとも、それは私が観察している行動です。これを処理する正しい方法はありますか?おそらくまったく異なるアプローチですか?

ご覧のとおり、リストをすぐにクリアしたくありません。要素が死んだときに削除したいのですが、これは最後の要素が削除されるまで正常に機能します。

0 投票する
1 に答える
132 参照

c++ - 異なるタイプの 2 つの std::list を組み合わせる: 可能ですか?

Foo* 型の std::list と、サイズが異なる Bar* 型の別の std::list があります。両方のタイプは、描画順序のためにリストを z 座標でソートできるポジショニング システムを実装します (実際には x、y、z 値を持つ Point で、z 値よりも小さい Predicate 関数でソートされます)。

上記以外は全く違います。リストを組み合わせて、独自のタイプだけでなく、すべての z 値を互いに比較できるようにする方法はありますか?

たとえば、現在、すべての Foo がソートされているか、すべての Bar がソートされています。次に、すべての Foo が描画されるか、すべての Bar が描画されます。これにより、Bar の z が Foo よりも低い場合でも、上に描画されます。明らかに意図した結果ではありません。

これを入力しているときにひらめきましたが、並列処理は機能するのでしょうか? 各リストを個別に並べ替えますが、Foo、Bar、Foo、Bar などを交互に描画します。それとも同じ問題が発生しますか? z値に関係なく、他のものの上に描画するものがありますか?

ありがとう。

0 投票する
1 に答える
145 参照

c++ - テンプレートを使用せずにイテレータを介して std::list を返す

この回答を参照して、2番目のコードブロック。私の質問は:

私が知っている場合は、 のみstd::lists<int>、および のみを処理し<int>ます。コメントで提案されているように、テンプレートを使用せずに、参照によってリストを渡さずに、これ (2 番目のブロックと 3 番目のブロック) を記述する方法はありますか? 見せていただけますか?

実装が単一の型しかカバーしていない場合、テンプレートの使用を避けるのは理にかなっていると思いますよね??? (または私は怠け者ですか?)

0 投票する
2 に答える
8665 参照

c++ - 他の場所に割り当てられた std::list 内のポインターを正しく削除する

重複の可能性:
std::list::remove メソッドは、削除された各要素のデストラクタを呼び出しますか?

ユーザーが描画用の Sprite オブジェクトへのポインターを登録できるようにする SpriteHandler クラスがあります。オブジェクトのメソッドにアクセスするだけです。ユーザーがプログラムの最後までに削除するのを忘れた場合に、ポインタに関連付けられたメモリを自動的に削除する安全キャッチを書きたかった (そして、ユーザーにとっても心配する必要はありません!):

私が抱えている問題は、最初のポインターが削除された後、次の反復子が既に解放されたオブジェクトを指していることです (メモリの場所は 0xfeeefeee です)。

それらを正しく反復処理して、それぞれを削除するにはどうすればよいですか?

0 投票する
1 に答える
3283 参照

linux - gcc std :: listの並べ替えの実装が非常に高速になる理由は何ですか?

リンクリストの実装があり、MergesortアルゴリズムとQuickSortアルゴリズムの両方を試しています。

私が理解していないのは、std::listのソート操作が非常に高速である理由です。Linuxでstd::listを見ると、配列ベースのリストではなく、リンクリストでもあるように見えます。

ここでDaveGambleのバージョンとほぼ同じように試した マージソート:リンクリストのマージソート

また、私はこのコードに基づいて簡単なクイックソートを試してみようと思いました: http ://www.flipcode.com/archives/Quick_Sort_On_Linked_List.shtml

驚いたことに、std :: listとsortを使用して1,000万個の乱数を並べ替えるのは、他のいずれよりも約10倍高速でした。

そして、質問している人のために、はい、私はこのプロジェクトのために私自身のリストクラスを使用する必要があります。

0 投票する
1 に答える
1365 参照

c++ - ネストされたstlリスト

リストを含むリストの配列を作成したいと思います。

たとえば、このようなもの

明らかに、このコードはすべてのコンパイラで機能するわけではありません。

この種の構造体を作成するための最良の方法は、私がここで間違っていると思っているからです。

0 投票する
1 に答える
7797 参照

c++ - イテレータを指定して std::list オブジェクトを置き換える

std::list への反復子が与えられた場合、反復子が参照する位置でオブジェクトをどのように置き換えますか? 現在、私が考えることができるのは、新しいオブジェクトとイテレータを使用して挿入を呼び出し (イテレータによって参照される要素の前に新しいオブジェクトを挿入するため)、次に、消去を呼び出して置き換えられるオブジェクトを削除することです。置換を達成するための回り道の少ない方法はありますか?

0 投票する
3 に答える
1051 参照

c++ - std::list へのポインタで削除を使用しますか?

私のプログラムでは、std::listオブジェクトへのポインターがあり、そのように割り当てられています。

その後、プログラムの後半で、そのように削除します。

何らかの理由で、delete ステートメントで Windows ブレークポイントがトリガーされます。delete ステートメントでブレークすると、リストが存在し、サイズが 0 であることがわかります。また、エラーがスローされる場合に備えて、リストに要素を追加することはありません (と思います)。

コードは、VS2005 用の MS VC++ コンパイラでコンパイルされています。

エラー メッセージには、Windows がメモリの破損を示すブレークポイントをトリガーしたことが示されています。スタック トレースには、次のように記載されています。

この削除ステートメントは、.NET DLL に組み込まれている C++ コードに含まれているため、プログラムは混合モードで実行されていることに注意してください。

0 投票する
4 に答える
2798 参照

c++ - boost::graph で EdgeList をソートする

次のように定義された boost::graph のエッジ リストを並べ替えたいと思います。

頂点とエッジを追加した後、エッジ リストを並べ替える方法。最初に最大の重みで優位に立ちますか?

私は1つが使用できることを知っています

ベクトルの場合、std::list では機能しません。