問題タブ [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++ - O(n ^ 2)よりも時間計算量が優れているSTLベクトルおよびSTLアルゴリズムで左結合を行う方法は?
たとえば、Person(名前、名前など)オブジェクトを含む2つのベクトルがあります。ベクトルの1つ(「大」と名付けましょう)を取得し、このベクトルの各要素について、2番目の要素(「小」)で対応する要素を見つけ、「小」ベクトル要素から「大」ベクトルにデータをマージします。エレメント。この操作は、SQL用語での左結合と非常に似ていますが、データのマージが追加されています。最も簡単な方法は2サイクルを作成することですが、これはO(n ^ 2)時間計算量につながります。STLアルゴリズムでもっとうまくやることはできますか?
c++ - valarray で C++ 標準ライブラリ アルゴリズムを使用する
私は、標準アルゴリズムの不器用な独自のバージョンを再実装することを避けようとしているため、標準ライブラリ バージョンで遊んでいます。私は C++ の専門家ではないので、慎重に進め、完全なデバッグ オプションをオンにします。
valarray
具体的には、コンテナーでバイナリ検索を使用しています。次のコード ブロックは正しい結果を生成するようであり、問題はありvalgrind
ません。それでも、自分のやっていることが本当に許可されているのか、それとも単にコンパイラによって許可されているのかがわからないので、滑りやすい坂道を進んでいると感じています。
代表的なコード:
質問:
- 私がここでしていることは本当に合法ですか?
- double への 2 つのポインターの差が int になるのはなぜですか? (
???
コメントの行で) 型変換のオーバーヘッドはどのくらいですか? ---この種の機能は、計算時間の 90% 以上を占めるコードの一部に配置されるため、効率に関心があります。
c++ - 小さなコンテナに反復する方法(つまり、ストライド!= 1)
ここに精神的に非常に似ている質問があります。残念ながら、その質問はあまり反応を促しませんでした。別の方法が提案されることを期待して、より具体的な質問をしたいと思いました。
std::cin
バイナリファイルを(with )に書き込んでいますtar --to-command=./myprog
。バイナリファイルはたまたまfloatのセットであり、データを入れたいと思いますstd::vector<float>
-理想的にはc++の方法です。
私は非常にうまく生成できます(この回答std::vector<char>
のおかげで )
私は今、自分std::vector<char>
をstd::vector<float>
、おそらくwithstd::transform
と変換を行う関数(たとえば、achar[2]
からa )に変換したいと思っていfloat
ます。しかし、私は苦労しています。なぜなら、私std::vector<float>
の要素はの半分になるからstd::vector<char>
です。2のストライドで繰り返すことができれば、私は大丈夫だと思いますが、前の質問から、私はそれを行うことができないようです(少なくともエレガントではありません)。
c++ - shared_ptr、関数オブジェクトで STL アルゴリズムを使用する
shared_ptr のセットがあり、remove_copy_if を述語用のカスタム関数オブジェクトと共に使用したいと考えています。私はそれを行うための「最良の」方法を知りませんでした。今、私はこれを機能させています:
オブジェクトがポインターを保持しないため、shared_ptr への const 参照を行うことにしました。これは、shared_ptr の余分なコピーよりも効率的であるように思われました。
オブジェクトへの const 参照を取得する方が良いようですが、コンパイルできませんでした。これに変更しましたが、うまくいきません:
g++ からの出力は次のとおりです。
それを行う別の方法、または提案はありますか?
c++ - shared_ptr のコンテナーで C++ std::equal を使用する
std::shared_ptr のコンテナーがあります。std::equal を使用して 2 つのコンテナーを比較したいと考えています。クラス A には operator== が定義されています。各要素が、shared_ptr で定義されたものではなく、operator== を使用して同等であるかどうかを比較したい。
equal に渡す関数または関数オブジェクトを作成する必要がありますか? それとも、より単純なビルトインがありますか (<functional> で定義されているものなど)?
c++ - std::remove_copy_if に関して copy_if を実装する方法は?
私はほとんどの場合うまくいく解決策を考え出しました:
機能しない唯一の状況は、関数ポインターが const ref 引数を取る場合です。これにより、次のコンパイラ エラーが発生します。
どうやら参照への参照がここで行われようとしています。
copy_if
私の質問は次のとおりです。次の条件を満たすa を実装するにはどうすればよいですか。
- std::remove_copy_if に関する実装
- 関数オブジェクトと関数ポインタを操作する必要があります
- ヘルパー クラスを定義せずに (関数スコープ外)
- 純粋な C++ と STL を使用 (C++0x またはブーストなし)
アップデート
で動作するため、これが可能であると思いますboost::bind
:
c++ - C ++ 11の最小および最大可変個引数テンプレートバリアント?
私は、新しいinitializer_listバリアントがあり、 Variadic Templateバリアントがないという標準を読んmin
でいますか?max
minmax
したがって、これは問題ありません。
しかし、これはそうではありません:
多くの人は、可変個引数テンプレートがこれを簡単に実装できると期待しているので、がっかりするかもしれません。
VTを使用するのはやり過ぎだmin
と思いますmax
- 可変個引数テンプレートは、複数のタイプを処理できます
- 初期化リストは、すべてのタイプが設計上同じであることを確認します
したがって、ILはこのタスクにはるかに適しています。
私の解釈は正しいですか?
c++ - Choosing specific objects satisfying conditions
Let's say I have objects which look very roughly like this:
I'm storing these objects inside a vector and the vector is rather small (say, at most around 1000 elements). Then, inside a performance critical algorithm, I would like to choose the object that both has the property X and has the least size (in case there are multiple such objects, choose any of them). I need to do this "choosing" multiple times, and both the holding of the property X and the size may vary in between the choices, so that the objects are in a way dynamic here. Both queries (property, size) can be made in constant time.
How would I best achieve this? Performance is profiled to be important here. My ideas at the moment:
1) Use std::min_element with a suitable predicate. This would probably also need boost::filter_iterator or something similar to iterate over objects satisfying property X?
2) Use some data structure, such as a priority queue. I would store pointers or reference_wrappers to the objects and so forth. This atleast to me, feels slow and probably it's not even feasible because of the dynamic nature of the objects.
Any other suggestions or comments on these thoughts? Should I just go ahead and try any or both of these schemes and profile?
templates - Dev C++ コンパイラではコンパイルされません
Dev_C++ 4.9.9.2 コンパイラを使用していくつかのコードを移植しようとしていますが、標準のアルゴリズム テンプレートを認識できません。
コンパイルしようとすると、多数のエラー メッセージが表示されますが、そのほとんどは「C リンケージを含むテンプレート」です。私は何を間違っていますか?コンパイラで調整する必要がある設定はありますか。
技術仕様 - Ubuntu 10.10 AMD64 ホスト マシン上にある Oracle VirtualBox 上の Windows XP SP3 でコンパイラを実行しています。
c++ - STL アルゴリズムの構成可能性
STL アルゴリズムは、C++ で非常に便利なものです。しかし、私を苛立たせていることの 1 つは、それらが構成可能性に欠けているように見えることです。
たとえば、 があり、それをペアのメンバーのみを含むvector<pair<int, int>>
に変換したいとします。それはとても簡単です:vector<int>
second
または、メンバーが偶数vector
のペアのみをフィルタリングしたいかもしれません。first
また、非常に単純です:
しかし、両方をやりたい場合はどうすればよいでしょうか。transform_if
アルゴリズムはなく、両方transform
を使用すると、中間結果を保持するためにcopy_if
一時的なものを割り当てる必要があるようです:vector
これは私にはかなり無駄に思えます。一時的なベクトルを回避するために私が考えることができる唯一の方法は、放棄transform
しcopy_if
て単純に使用することですfor_each
(または通常の for ループ、あなたの好みに合ったもの):
ここで何か不足していますか?一時的なストレージを必要とせずに、2 つの既存の STL アルゴリズムを新しいものに構成する良い方法はありますか?