問題タブ [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++ - std::max_element に ForwardIterator が必要なのはなぜですか?
C++ 標準ライブラリのmax_element
アルゴリズムでは、モデルに入力として渡される反復子が必要ForwardIterator
です。
私の理解では、 aを使用して同じ範囲を複数回反復できることを指定することでForwardIterator
絞り込むことができます。したがって、マルチパス アルゴリズムにはs が必要です。InputIterator
ForwardIterator
ForwardIterator
ただし、max_element
これはマルチパス アルゴリズムではありません。最大要素を決定するには、範囲を 1 回反復するだけで十分です。では、なぜmax_element
の追加機能が必要なのForwardIterator
でしょうか?
c++ - std::count(_if) が size_t ではなく iterator::difference_type を返すのはなぜですか?
重複の可能性:
C++ 標準アルゴリズム「count」が size_t ではなく ptrdiff_t を返すのはなぜですか?
標準 C++ にはアルゴリズムstd::count
/があります。std::count_if
効果: 範囲 [first,last) 内の反復子 i の数を返します。これには、次の対応する条件が適用されます: *i == value, pred(*i) != false.
difference_type
is iterator's difference_type
、これは負になる可能性がありますが、count
値 >= 0 のみを返すことができます。たとえば、なぜdifference_type
そうではないのでしょうか?size_t
c++ - remove_copy_ifをostream_iteratorで使用する場合、コピーされた範囲の終わりを判別します
remove_copy_ifを使用して、 ostream_iteratorを介してiterable
直接コピーしようとしています。が出力範囲の終わりまでであることを保証します。この戻り値は、出力イテレーターの開始と戻りイテレーターの間の距離を調べることにより、宛先にコピーされた要素の数を判別する方法で役立ちます。これは、コンテナを使用する場合には意味がありますが、同じ機能を使用して、宛先にコピーされる要素の数を決定する方法です。stdout
remove_copy_if
return value
iterator
ostream_iterator
次の例は、私が達成したいと思うかもしれないことをより理解するはずです
string - STLを使用して文字列の単語をインプレースで反転する
この質問はSO:で死ぬまで行われました。これは、文字列を反転してから単語を反転する従来のアルゴリズムのSTL関数を使用した私のバージョンです。ループを使用しない、よりエレガントなソルンはありますか?
入力が完全であり、文の前後にスペースがなく、単語間にちょうど1つのスペースがあると仮定します。ループを必要としないstlソリューションはありますか?
最高の、サブラマニア人
c++ - c++ソートはカスタム関数を使用しません
並べ替えようとしています
std::sort
アルゴリズムヘッダーから使用しようとしています
私はそれを
これは私のソート関数です:
並べ替えの目的は、std :: uniqueを呼び出して、一意の値を持つベクトルを取得することです。cygwinでgccを使用してコンパイルすると、エラーは発生しませんが、繰り返しが発生します。また、Visual Studio 2010を使用してコンパイルすると、operator<が定義されていないというエラーが発生します。ステップスルーしましたが、定義したものではなく、独自のソート関数を使用しようとしています。
これを修正する方法がわかりません、何か提案はありますか?
その他の詳細:すべてのベクトルが同じサイズになることが保証されています。その目的は、文字列の元のベクトルのすべての順列のベクトルです。各文字列はコマンドであり、これらのコマンドをシャッフルできるさまざまな方法をすべて探しています。だから私は重複を取り除く必要があります。
c++ - ベクトル内の値のセットをチェックする
私は一連の数字を持っています:
これらの数字のいずれかが私のベクトルに含まれているかどうかを確認したいと思います。
アルゴリズムのstd::find:を使用して、それぞれを個別にチェックできることを知っています。
この例では、数字は3つしかありませんが、実際の数字のセットはさらに大きくなります。また、これはちょっと退屈なようです。より良い解決策はありますか?
c++ - 2 つの STL セットの交点を見つける方法は?
C++ で 2 つの std::set の共通点を見つけようとしましたが、エラーが発生し続けます。
このための小さなサンプルテストを作成しました
後者のプログラムは出力を生成しませんがs3
、次の値を持つ新しいセット (と呼びましょう)があることを期待しています。
代わりに、次のエラーが表示されます。
このエラーから私が理解しているのは、パラメーターとしてset_intersection
受け入れる定義がないということです。Rb_tree_const_iterator<int>
さらに、std::set.begin()
メソッドはそのような型のオブジェクトを返すと思いますが、
std::set
C++で 2 つの交点を見つけるより良い方法はありますか? できれば組み込み関数?
c++ - 必要:エクステントの1次元リストを維持するためのC++クラス
エクステントの1次元リストを維持できるC++クラスを探しています。
各エクステントは(start,len)
ペアとして定義されます。
リストにエクステントを追加して、それらを自動的に統合できるようにしたいと思います。つまり、リストにとが(0,5)
あり、追加された場合、新しいリストには。のみが含まれる必要があります。(10,5)
(5,5)
(0,15)
エクステントがリストから削除されることはありません。
このようなものはありますか?
ありがとう。
c++ - STLアルゴリズム:コンテナー用の追加のインターフェースがないのはなぜですか(イテレーターのペアに追加)?
なぜSTLがアルゴリズム関数をオーバーロードしないので、コンテナーを提供するだけでアルゴリズム関数を呼び出すことができ、begin+endイテレーターを渡すためのより冗長な方法をとらないのだろうかと思います。もちろん、コンテナ/配列のサブシーケンスを処理するためにイテレータペアも使用する理由は理解していますが、これらのメソッドへのほとんどすべての呼び出しは、コンテナ全体を使用しています。
書くだけの方が便利で、読みやすく、保守しやすいと思います。
STLがこれらのオーバーロードを提供しない理由はありますか?[編集:インターフェースをこの制限されたものに置き換えるのではなく、コンテナーベースの反復面を提供することも意味します!]あいまいさをもたらしますか?私はこのようなことを考えています:
私は何かが足りないのですか?
c++ - c ++ベクター内の構造体要素が等しいかどうかを検索する方法は?
という名前のクラスには、 s structSparseMatrix
のベクトルがあります。Node インスタンスのとのメンバーが同じ場合、そのノードの値が に追加されるように、演算子Node
をオーバーロードしたいと考えています。アルゴリズム ライブラリのメソッドを使用してこれを達成するにはどうすればよいですか?+=
i
j
This
関数に渡すために使用しようとしfind_if
ましたが、1 つの反復子に対してのみ機能します。
基本的に、私は Node::samePosition() に 2 つのパラメーターを渡したいと考えています。現在のイテレーターが渡されるので、それらが等しいかどうかを確認できますfind_if
。itOther
編集:関数を分離し、次samePosition
を使用して2つのパラメーターを渡したいと思いますfind_if
: