問題タブ [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.
c++ - std::list の違いは何ですかおよび std::map C++ STL で?
std::list<std::pair>
とはどう違いstd::map
ますか?find
リストの方法もありますか?
c++ - ソートされた std::list の std::pair を std::map に変換する方法
を持っていますがstd::list< std::pair<std::string,double> >
、これは に従ってソートされていることがわかっていstd::string element
ます。
要素にstd::find_if
基づいて多くのことをしたいので、 withとがより適切であると考えています。std::string
std::map<string,double,MyOwnBinaryPredicate>
lower_bound
upper_bound
事実は、効率的な方法でinsert
要素を追加したいということです。std::map
したがって、追加のイテレータを使用して高速化したいと考えていinsert
ます。
最も簡単な方法は、 を使用しconst_reverse_iterator
て を通過し、 のをstd::list
使用することだと思います。begin()
std::map
このようにしますか、それとも悪い考えですか?
ありがとう!
c++ - std::strings の std::list を簡単に初期化しますか?
C++0x では、次のようになります。
標準の非0x C++で最も簡単な方法は何ですか?
c++ - イテレータがend()を超えないようにする方法は?
advance
私はいくつかで使用していますがiterators
、上記の飛躍の可能性を恐れていますend()
。イテレータが境界の間にあることを確認したいのですが、私は考えましたdistance
が、期待したものが返されないようです(イテレータが高架になっている場合は正でない値end()
)。リープフロッグがないことをどのように確認しますか?
出力は次のとおりです。
c++ - std::list 固定サイズ
std::list
固定要素数で作成するにはどうすればよいですか?
c++ - OpenMPの並列化とリストのベクトルからの削除
ギャング。まず、問題とアプローチの概要を説明します。
画像と各画像のピクセル位置を含むリスト(リストのリスト)があります。その画像のリストからランダムにn個のアイテムを選択し、画像ごとにk個のランダムなピクセル位置を反復処理します。これを並行してやりたいです。処理されたピクセルごとに、リストから削除したいと思います。
私のアプローチは、画像とピクセルリストをすべてのスレッドに分散することです。したがって、各スレッドには独自の画像リストとピクセル位置のリストがありますが、2つのスレッドが同じ画像を同時に処理することはありません。これらをベクトルに格納します。
したがって、コードが次のようになっているとしましょう。
次に、mainList[0]
ID 0のスレッドで処理される画像が含まれます。次の方法でスレッドを起動します。#pragma omp parallel num_threads(numThreads_)
次に、スレッドの画像リストからランダムに画像をサンプリングする同じコードを実行します。
問題は、ピクセルが処理され、スレッドがピクセルリストからピクセルを消去するときに、たとえばmainList[0].begin()->pixels_.erase(someIter)
、アサーションを取得することがあることです。削除演算子までトレースします。
std :: listへの書き込みはスレッドセーフではないことは知っていますが、メインリストの各リストに1つのスレッドのみがアクセスする、リストのリストに対しては安全であると確信していました。限られたコードを提供したことは知っていますが、問題は、各スレッドが一度に1つのリストにしかアクセスできず、リストがスレッド間で共有されていない場合に、リストのリスト(またはリストのベクトル)から並行して削除することになります。
ここで何が欠けていますか?リストのリストのベクトルから並行して削除することはできませんか?
c++ - リストイテレータ+演算子
だから私はここに世界最悪のコードを持っています。これを行うためのより良い方法はありますか?
'+ 1'を使用すると、次のようになります。
c++ - c++ std::list 並べ替え 順序を保持
重複の可能性:
std::list<>::sort は安定していますか?
C++ std::list ソート関数は、リスト内の等しい要素の順序を保持することが保証されていますか? たとえば、リストにオブジェクト A、B、および C があり、A == C および B < A となるように比較演算子がオーバーロードされている場合、必然的に BAC を取得できますか、それとも BCA を取得できますか?
c++ - リストのリストを使用する際のメモリ リーク
「生産化」するためにいくつかのコードを投げかけられました。メモリ リーク チェッカーを実行したところ、以下の「for」ループ内の次の行がメモリ リークとして呼び出されます。
配列マップの宣言方法は次のとおりです。
いくつかの使用法を次に示します。
メモリリークチェッカーは、強制終了する前に 5 分間ダンプしました。次に、クリーンアップ ルーチンに次のコードを追加しましたが、それでも 150 個の警告が出力され、すべて先頭の for ループ内のコード行を指しています。
この配列マップに関連付けられているメモリを完全に削除するにはどうすればよいですか?
c++ - 挿入によって std::list イテレータを有効に保つ
注:これは、「リストを使用するか、デキューを使用するか」という問題ではありません。に直面したイテレータの有効性についての質問ですinsert()
。
これは簡単な質問かもしれませんが、私はこれを行う正しい方法を理解するにはあまりにも密集しています。ネットワーク トラフィック バッファを (良くも悪くも) として実装std::list<char> buf
し、現在の読み取り位置を iterator として維持していますreadpos
。
データを追加するときは、次のようにします
readpos
私の質問は、イテレータを有効に保つにはどうすればよいですか? それが old の中間を指している場合、buf
(std::list のイテレータ保証により) 問題ないはずですが、通常はすべてのデータを読み取って処理した可能性があり、readpos == buf.end()
. readpos
挿入後、常に次の未読文字を指すようにしたいのですが、挿入の場合は最初に挿入された文字でなければなりません。
助言がありますか?(以下に提案されているように、バッファを a に変更するstd::deque<char>
だけで、タスクにより適しているように見えます。)
更新: GCC4.4 を使用した簡単なテストから、deque と list の動作が次の点で異なることがreadpos = buf.end()
わかりました。最後に挿入した後、readpos はリスト内で壊れていますが、deque 内の次の要素を指しています。これは標準保証ですか?
( cplusplusによると、すべての deque::insert()はすべてのイテレータを無効にしました。これは良くありません。両端キュー内の位置を追跡するには、イテレータよりもカウンタを使用する方がよいでしょうか?)