問題タブ [stl-algorithm]
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++ - 古い GCC では std::back_inserter に const_reference が必要です。なんで?
現在、GCC の新しいバージョンではコンパイルできるが、古いバージョンではコンパイルできないコードを検討しています。私の場合、あるデータ構造からカスタム データ構造までのデータを使用しstd::back_inserter
ています。ただし、このカスタム データ構造std::copy
の typedef を忘れると、 GCC 4.4 でコンパイルされません。typedef value_type & const_reference
同じコードは、GCC 4.5 で問題なくコンパイルおよび実行されます。
これらの 2 つのコンパイラ バージョンの違いは何ですか。コードは一方のバージョンではコンパイルされますが、もう一方のバージョンではコンパイルされません。GCC 4.4 では完全ではなかった C++11 の実装と関係があると思います。おそらく何か、decltype
または別の新しい C++11 キーワードがあると思います。
std::back_inserter
また、型を定義せずに を使用した場合、このコードは正しいconst_reference
ですか? 通常、STL アルゴリズム ライブラリと互換性を持たせるには、typedef の完全なセット ( 、value_type
など) を実装する必要があると考えていました。または、この場合にコードがコンパイルされた場合、危険なもの (たとえば、他のデータ構造を破壊する移動セマンティクス) を呼び出していないと安全に想定できますか?reference
const_reference
algorithm - LCSアルゴリズム(例)
2 つのシーケンスの最長共通サブシーケンスを見つけるための動的計画法アルゴリズムがあります。2 つのシーケンス X と Y の LCS アルゴリズムを見つけるにはどうすればよいですか (正しさのテスト)
c++ - O(n)時間未満でstd::setのランダム要素を選択する方法は?
この質問には制約が追加されています。
偏りがない限り、不均一な選択を許可します。
「セットは通常、二分探索木として実装されており、バランスをとるためにある種の深さまたはサイズの情報が含まれていると予想されるため、木の重み付きランダムウォークを実行できると思います。ただし、それを行うためのリモートで移植可能な方法は知りません。
編集: 制約は、償却された時間に対するものではありません。
c++ - C++ で配列を含むオブジェクトのカスタム std::set コンパレータを作成する
ここで質問を簡単にしようとしています。メンバー変数として int 配列を持つ構造体が 1 つあります。
elem ポインターを std::set に入れたいのですが、後で find() を使用してそのセットから特定のオブジェクトを検索したいので、この std::set にカスタム コンパレーターを提供したいと考えています。
コンパレータのロジックを教えてください。任意のサイズの配列の一般的なロジックはありますか?
c++ - コンテナ内の要素のメンバー関数からの結果を累積する
次のように、カウントを返す関数を持つクラスがあります。
そして、私のプログラムのどこかに、そのクラスのオブジェクトのベクトルがあります。通常のループのように実装された、合計カウント(CTestClass :: GetCount()の結果の合計)を取得する関数があります。
標準ライブラリで利用できる機能を利用するようにリファクタリングしたいので、と思いましたaccumulate
。関数オブジェクトを使用して(簡単に)実行できましたが、別のオブジェクトを宣言しなくても実行できるとほぼ確信しています(C ++ 11またはブーストがないため、ラムダはありませんが、 TR1を持っている)。
答えを探しているとき、私はこれらのリソースを見つけましたが、それらは質問を解決しません:
- これはほとんど同じ質問であり、提供される答えはループ、アキュムレートとファンクター、アキュムレートとラムダですが、バインドなどへの未回答の参照があります。
- 同様の質問に対するこの回答では、、、
accumulate
およびplus
を 使用bind
していますが、メンバー関数の代わりにデータメンバーを使用しています。
それで、bindまたは同様のものを使用してこれを行う方法はありますか?
c++ - STL-ソートが期待どおりに機能しない
これを正しく使用しているように感じますが、コンパイラはそうではないと感じます。stl sortアルゴリズムを使用して、sort_by_name関数でコースのリストをアルファベット順にソートしようとしています。これは大まかに私が書いたものです:
エラー:
助けてくれてありがとう。
c++ - std::自己定義型との差を設定
私は自分の構造体を次のように定義しました
と一緒に使用していstd::set
ます。set_difference
アルゴリズムを使用したい(2つのセットの違いを判別するための前の質問ですでに述べたように。コードを呼び出そうとすると、コンパイルが停止し、次のエラーメッセージが表示されます。
最小限の例は次のようになります。
c++ - 構造体からデータにアクセスするとき、演算子のオーバーロードはどこに行きますか?
構造体のベクトルをソートする関数が構造体にあります。しかし、ベクトル内の2つの要素を比較するには、同じ構造体内の別の変数の値が必要です。この種の機能を実現するには、演算子のオーバーロードまたは比較関数をどこに保持すればよいのか疑問に思いました。次のペーストでサンプルを提供しました。
もちろん、これは機能しません。比較関数のために他の多くのシグネチャとスコープを試しましたが、何も機能していないようです。
ここで何ができるか考えてみませんか?
c++ - std::copyフック
std::copy
と同様の機能を使用していると仮定しstd::remove_if
ます...フックを追加するための最良の方法は何ですか?特に、コピーのステータスをログに記録したいと思います。最後に、次と同等のものが必要です。
しかし、使用std::copy
c++ - std :: set_symmetric_differenceを使用する場合、std :: map <>::value_typeに基づくSTLコンテナのテンプレートタイプ
std :: mapの2つのインスタンスがある場合、std :: set_set_symmetric_difference()アルゴリズムを使用してすべての違いを保存しようとしています。私は次の作業コードを持っています:
これは私が期待するものを印刷します:
私を悩ませているのは、マップとの違いのベクトルであるMyPairsのtypedefです。
typedef std::vector< MyMap::value_type > MyPairs
最初は、Non-static const memberの受け入れられた回答に記述されている次のエラーが発生したときのように、ベクトルをtypedefしようとしましたが、デフォルトの代入演算子を使用できません
これは、マップ内の値のキーがconstであるため、キーを変更したり、マップを無効にしたりすることを回避できます。これは理にかなっています。これは、ベクトルに要素を追加するためstd::map<Key,Value>::value_type
にstd::pair<const Key, Value>
意味operator=()
を使用できないためです。これが、私の作業例でconstを指定しない理由です。
冗長ではないMyPairsベクトルのテンプレートパラメーターを定義するためのより良い方法はありますか?私がこれまでに思いついた最高のものはstd::vector< std::pair<MyMap::key_type, MyMap::mapped_type> >