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

c++ - std::list の違いは何ですかおよび std::map C++ STL で?

std::list<std::pair>とはどう違いstd::mapますか?findリストの方法もありますか?

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

c++ - ソートされた std::list の std::pair を std::map に変換する方法

を持っていますがstd::list< std::pair<std::string,double> >、これは に従ってソートされていることがわかっていstd::string elementます。

要素にstd::find_if基づいて多くのことをしたいので、 withとがより適切であると考えています。std::stringstd::map<string,double,MyOwnBinaryPredicate>lower_boundupper_bound

事実は、効率的な方法でinsert要素を追加したいということです。std::mapしたがって、追加のイテレータを使用して高速化したいと考えていinsertます。

最も簡単な方法は、 を使用しconst_reverse_iteratorて を通過し、 のをstd::list使用することだと思います。begin()std::map

このようにしますか、それとも悪い考えですか?

ありがとう!

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

c++ - std::strings の std::list を簡単に初期化しますか?

C++0x では、次のようになります。

標準の非0x C++で最も簡単な方法は何ですか?

0 投票する
6 に答える
12165 参照

c++ - イテレータがend()を超えないようにする方法は?

advance私はいくつかで使用していますがiterators、上記の飛躍の可能性を恐れていますend()。イテレータが境界の間にあることを確認したいのですが、私は考えましたdistanceが、期待したものが返されないようです(イテレータが高架になっている場合は正でない値end())。リープフロッグがないことをどのように確認しますか?

出力は次のとおりです。

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

c++ - std::list 固定サイズ

std::list固定要素数で作成するにはどうすればよいですか?

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

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つのリストにしかアクセスできず、リストがスレッド間で共有されていない場合に、リストのリスト(またはリストのベクトル)から並行して削除することになります。

ここで何が欠けていますか?リストのリストのベクトルから並行して削除することはできませんか?

0 投票する
5 に答える
1384 参照

c++ - リストイテレータ+演算子

だから私はここに世界最悪のコードを持っています。これを行うためのより良い方法はありますか?

'+ 1'を使用すると、次のようになります。

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

c++ - c++ std::list 並べ替え 順序を保持

重複の可能性:
std::list<>::sort は安定していますか?

C++ std::list ソート関数は、リスト内の等しい要素の順序を保持することが保証されていますか? たとえば、リストにオブジェクト A、B、および C があり、A == C および B < A となるように比較演算子がオーバーロードされている場合、必然的に BAC を取得できますか、それとも BCA を取得できますか?

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

c++ - リストのリストを使用する際のメモリ リーク

「生産化」するためにいくつかのコードを投げかけられました。メモリ リーク チェッカーを実行したところ、以下の「for」ループ内の次の行がメモリ リークとして呼び出されます。

配列マップの宣言方法は次のとおりです。

いくつかの使用法を次に示します。

メモリリークチェッカーは、強制終了する前に 5 分間ダンプしました。次に、クリーンアップ ルーチンに次のコードを追加しましたが、それでも 150 個の警告が出力され、すべて先頭の for ループ内のコード行を指しています。

この配列マップに関連付けられているメモリを完全に削除するにはどうすればよいですか?

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

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()はすべてのイテレータを無効にしました。これは良くありません。両端キュー内の位置を追跡するには、イテレータよりもカウンタを使用する方がよいでしょうか?)