問題タブ [stl]
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++ - 'const std::vector を初期化する方法' ac 配列のように
const std::vector<const T>
likeを作成して初期化const T a[] = { ... }
して固定 (および少数) の値にするエレガントな方法はありますか?
を期待する関数を頻繁に呼び出す必要がありvector<T>
ますが、私の場合、これらの値は決して変更されません。
原則として、私は次のようなことを考えました
v はこのコンパイル単位の外では使用されないためです。
c++ - std::map 演算子 [] の違反読み取り場所
私に受け継がれた古いコードを実行しているときに問題が発生しました。99% の確率で動作しますが、「違反の読み取り場所」という例外が発生することがあります。プロセスの存続期間全体でこのコードを実行する可能性のあるスレッドの数は可変です。発生頻度が低いのは競合状態を示している可能性がありますが、この場合に例外が発生する理由はわかりません。問題のコードは次のとおりです。
operator[] への最初の呼び出しで、マップの operator[] 実装で例外がスローされます (STL の VS2005 実装を使用します)。
私はすでに operator[] でスレッドをフリーズし、それらをすべて同時に実行しようとしましたが、その方法論を使用して例外を再現することはできませんでした。
それがスローされる理由を思いつくことができますか?
(はい、STL がスレッド セーフではないことはわかっています。ここで変更を加える必要があります。上記の動作が見られる理由について最も興味があります。)
リクエストに応じて、ここで例外に関する詳細をいくつか説明します:
app15-51-02-0944_2008-10-23.mdmp の 0x00639a1c (app.exe) で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000004。
マルチスレッドの問題の解決策を提案してくれた皆さんに感謝しますが、これはこの質問が意図しているものではありません。はい、提示されたコードが正しく保護されておらず、達成しようとしていることが過剰であることは理解しています。私はすでにそれに対する修正を実装しています。そもそもこの例外がスローされた理由をよりよく理解しようとしています。
c++ - STLを使用してベクトル内のすべての要素を検索する
コレクションのメンバー関数を呼び出して、操作する必要のある要素のコレクションがあります。
引数なしで関数を呼び出す場合、それは非常に簡単です。
呼び出したい関数に引数が1つあれば、同様のことができます。
私の問題は、ある条件を満たす場合に、ベクトル内の要素に対して関数を呼び出したいということです。 std::find_if
述語の条件を満たす最初の要素にイテレータを返します。
述語を満たすすべての要素を見つけて、それらを操作したいと思います。
私は、「find_all
」または「do_if
」に相当するSTLアルゴリズム、または既存のSTLでこれを実行できる方法(1回だけ反復する必要があるなど)を検討してきました。 forループと比較を使用した反復。
c++ - const char* の束をセットに保持する最も簡単で安全な方法は?
const char ポインターの束を std::set コンテナーに保持したい [1]。std::set テンプレートにはコンパレータ ファンクターが必要であり、標準 C++ ライブラリは std::less を提供しますが、その実装は 2 つのキーを直接比較することに基づいており、ポインターの標準ではありません。
ポインターを整数にキャストして比較することで、独自のファンクターを定義して operator() を実装できることはわかっていますが、よりクリーンで「標準的な」方法はありますか?
std::strings の作成を提案しないでください - 時間とスペースの無駄です。文字列は静的であるため、アドレスに基づいて等しいかどうかを比較できます。
1: ポインターは静的文字列へのポインターであるため、その寿命に問題はありません。消えません。
c++ - stlを使用してLinuxでgccを使用してfindfirst、findnextを実行する標準的な方法はありますか?
Linux の gcc で _findfirst / findfirst、_findnext / findnext API が見つからないようです。実際には、標準テンプレート ライブラリ (STL) が含まれている場合はそれを使用します。
Linux for C++ (gcc) のディレクトリ内のファイルを一覧表示するために使用できる API を知っている人はいますか?
c++ - 別の std::vector の値で std::vector をソートするにはどうすればよいですか?
いくつかstd::vector
ありますが、すべて同じ長さです。これらのベクトルの 1 つを並べ替え、他のすべてのベクトルに同じ変換を適用したいと考えています。これを行うきちんとした方法はありますか?(できればSTLまたはBoostを使用してください)?一部のベクトルはint
s を保持し、一部のベクトルは s を保持しますstd::string
。
擬似コード:
c++ - std::vector と std::list と std::slist の相対的なパフォーマンスは?
リスト要素へのランダムアクセスが要件ではない単純なリンクリストの場合、std::list
代わりに使用することには大きな利点(パフォーマンスまたはその他)がありstd::vector
ますか? std::slist
後方トラバーサルが必要な場合、要素を反復処理する前にreverse()
リストを使用する方が効率的でしょうか?
c++ - 順序の条件が変わる可能性のある STL ソートセット
カスタム順序が定義された C++ STL セットがあります。
アイテムがセットに追加されると、自然に好きなように並べられるという考えでした。
しかし、私が今気づいたことは、時間の経過とともに順序付け述語が変化する可能性があるということです。
おそらく、セット内のアイテムは順序が崩れます。
だから本当に2つの質問:
アイテムが故障するのは有害ですか?起こり得る最悪の事態は、新しいエントリが間違った場所に置かれる可能性があるということです (実際には、私はそれを受け入れることができます)。または、これが原因でクラッシュしたり、エントリが失われたりする可能性はありますか?
セットの順序を「リフレッシュ」する方法はありますか? セットで std::sort() を使用できないようです。私が思いつく最善の方法は、コンテンツを一時コンテナーにダンプして、再度追加することです。
何か案は?
ありがとう、
ジョン
c++ - ジェネリックstd::vectorデストラクタを作成するにはどうすればよいですか?
オブジェクトへのポインタを含むベクトルがあり、clear関数を使用しても、ベクトル内のオブジェクトのデストラクタは呼び出されません。これを手動で行う関数を作成しましたが、これをベクトル内にある可能性のあるあらゆる種類のオブジェクトのジェネリック関数にする方法がわかりません。
これは、ベクトル内の特定のタイプのオブジェクトに対して正常に機能する関数ですが、オブジェクトポインターを使用して任意の種類のベクトルを取得できる単一の関数が必要です。
c++ - std::string を const wchar_t * に変換したい
方法はありますか?私のコンピュータは AMD64 です。
私が使用したとき:
VS2005 コンパイラは次のように述べています。
どうすればいいですか?