問題タブ [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 投票する
3 に答える
181 参照

c++ - ポインター付きの STL リスト

私はこのコードを書いて、他の大きなコードの大きな問題を理解しようとしましたが、メインのリストの 2 回目の繰り返しでゴミが表示され、ここで何が起こっているのかよくわかりません。確かに、私はポインターを壊す傾向がありますが、ここでは簡単に見えますが、誰か洞察がありますか?

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

performance - std::vector、QList、および std::list の奇妙な (巨大な) パフォーマンスの違い

比較的多数の要素 (~100k) を処理するプログラムを作成しているときに、std::listQListの間に奇妙な違いがあることに気付きました。最初は、うまく機能するstd::vectorを使用しました。しかし、プログラムはベクトル内のランダムな位置に要素を挿入する必要があることが多いため、イテレータが目的の位置にあるときに、挿入に一定の時間がかかるstd::listに切り替えました。

問題は、std::list のパフォーマンスが、insert() メソッドと push_back() メソッドの両方で std::vector よりも悪いことです。私が得た100kの要素を持つリストに100の連続した要素を追加するために測定:

  • std::vector の場合は ~25ms (最初に追加する場合の最悪のケース)
  • std::list で 600ms(!) 以上 (push_back() または insert(list.begin() を使用しても、任意の位置))。

要素を挿入する時間には、イテレータで位置に到達する時間は含まれないことに注意してください。

リストの原因となるキャッシュミスによるリストのパフォーマンスの問題は知っていますが、これはキャッシュミスの限界をはるかに超えているようです。また、要素 (5 つの定数長の変数を持つ単純な構造体) を挿入する時間は、リストのサイズとともに増加します。リストのサイズを取得する操作でさえ、より多くの時間がかかります。これは、リストの両方の操作で保証されている時間の複雑さとは完全に対照的です:定数

参照:こちら

好奇心から、std::listからQListおよび viola に変更されました。挿入時間は一定で、0 ミリ秒から 1 ミリ秒の間です。

挿入時間を測定するために使用されるコードを次に示します。

2 つの時点の間に他の操作は実行されません: 誤り: size() メソッドを使用しました

std::リスト:

結果: 経過時間: 662ms

Qリスト:

結果: 経過: 1ms

std::ベクトル:

結果: 経過時間: 27ms

では、なぜ QList と std::list の間に大きな違いがあるのでしょうか? またはそれ以上: std::listの場合、パフォーマンスが非常に悲惨なのはなぜですか?

補足情報として:フラグをc++ 11に設定して、Linux(Mint)でgccでQtEditorを使用しています

編集:

データ型と宣言:

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

c++ - std::find() で見つかった項目へのアクセス

私は標準テンプレート ライブラリを独学しようとしています。現在、私はstd::find()検索に使用していstd::listます。

アイテムが存在するかどうかをテストするコードがあり、問題なく動作しているようです。

ただし、一致する要素を返すはずのこのバージョンはコンパイルされません。「エラー C2446: ':' : 'int' から 'std::_List_const_iterator<_Mylist>' への変換がありません」というエラー メッセージが表示されます。

2 番目のバージョンで一致するアイテムのインスタンスへのポインターを返すにはどうすればよいですか?

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

c++ - std::list を反復処理する方法このコードで

そのブロック内の list2 の後に list1 を繰り返し処理したいと思います。それを実現する方法を教えてください。それが機能しない理由は推測できますが、それを実現する方法がわかりません

問題は、else if block ie の部分にあります。list1 とlist1.size() を繰り返します。..

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

c++ - 要素を 1 つ増やしてからリストを並べ替える

編集:ソート機能を使用できません。生物のランキングであるリストを持つプログラムを実行する必要があります。各生物には独自のIDがあり、ランキングは息子の数で降順​​でソートする必要があり、2つの生物の息子の数が同じ場合、それらはIDでますますソートされます. 1つの生物の息子の数を増やした後、次のアルゴリズムを作成しました。

しかし、いくつかの生物を挿入した後にランキングを印刷すると、うまくソートされないことがあるため、うまく機能しません。よろしくお願いします。次の操作しか使用できません。

私の母国語は英語ではありません。