問題タブ [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.

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

c++ - std::max_element に ForwardIterator が必要なのはなぜですか?

C++ 標準ライブラリのmax_elementアルゴリズムでは、モデルに入力として渡される反復子が必要ForwardIteratorです。

私の理解では、 aを使用して同じ範囲を複数回反復できることを指定することでForwardIterator絞り込むことができます。したがって、マルチパス アルゴリズムにはs が必要です。InputIteratorForwardIteratorForwardIterator

ただし、max_elementこれはマルチパス アルゴリズムではありません。最大要素を決定するには、範囲を 1 回反復するだけで十分です。では、なぜmax_elementの追加機能が必要なのForwardIteratorでしょうか?

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

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_typeis iterator's difference_type、これは負になる可能性がありますが、count値 >= 0 のみを返すことができます。たとえば、なぜdifference_typeそうではないのでしょうか?size_t

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

c++ - remove_copy_ifをostream_iteratorで使用する場合、コピーされた範囲の終わりを判別します

remove_copy_ifを使用して、 ostream_iteratorを介してiterable直接コピーしようとしています。が出力範囲の終わりまでであることを保証します。この戻り値は、出力イテレーターの開始と戻りイテレーターの間の距離を調べることにより、宛先にコピーされた要素の数を判別する方法で役立ちます。これは、コンテナを使用する場合には意味がありますが、同じ機能を使用して、宛先にコピーされる要素の数を決定する方法です。stdoutremove_copy_ifreturn valueiteratorostream_iterator

次の例は、私が達成したいと思うかもしれないことをより理解するはずです

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

string - STLを使用して文字列の単語をインプレースで反転する

この質問はSO:で死ぬまで行われました。これは、文字列を反転してから単語を反転する従来のアルゴリズムのSTL関数を使用した私のバージョンです。ループを使用しない、よりエレガントなソルンはありますか?

入力が完全であり、文の前後にスペースがなく、単語間にちょうど1つのスペースがあると仮定します。ループを必要としないstlソリューションはありますか?

最高の、サブラマニア人

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

c++ - c++ソートはカスタム関数を使用しません

並べ替えようとしています

std::sortアルゴリズムヘッダーから使用しようとしています

私はそれを

これは私のソート関数です:

並べ替えの目的は、std :: uniqueを呼び出して、一意の値を持つベクトルを取得することです。cygwinでgccを使用してコンパイルすると、エラーは発生しませんが、繰り返しが発生します。また、Visual Studio 2010を使用してコンパイルすると、operator<が定義されていないというエラーが発生します。ステップスルーしましたが、定義したものではなく、独自のソート関数を使用しようとしています。

これを修正する方法がわかりません、何か提案はありますか?

その他の詳細:すべてのベクトルが同じサイズになることが保証されています。その目的は、文字列の元のベクトルのすべての順列のベクトルです。各文字列はコマンドであり、これらのコマンドをシャッフルできるさまざまな方法をすべて探しています。だから私は重複を取り除く必要があります。

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

c++ - ベクトル内の値のセットをチェックする

私は一連の数字を持っています:

これらの数字のいずれかが私のベクトルに含まれているかどうかを確認したいと思います。

アルゴリズムのstd::find:を使用して、それぞれを個別にチェックできることを知っています。

この例では、数字は3つしかありませんが、実際の数字のセットはさらに大きくなります。また、これはちょっと退屈なようです。より良い解決策はありますか?

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

c++ - 2 つの STL セットの交点を見つける方法は?

C++ で 2 つの std::set の共通点を見つけようとしましたが、エラーが発生し続けます。

このための小さなサンプルテストを作成しました

後者のプログラムは出力を生成しませんがs3、次の値を持つ新しいセット (と呼びましょう)があることを期待しています。

代わりに、次のエラーが表示されます。

このエラーから私が理解しているのは、パラメーターとしてset_intersection受け入れる定義がないということです。Rb_tree_const_iterator<int>

さらに、std::set.begin()メソッドはそのような型のオブジェクトを返すと思いますが、

std::setC++で 2 つの交点を見つけるより良い方法はありますか? できれば組み込み関数?

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

c++ - 必要:エクステントの1次元リストを維持するためのC++クラス

エクステントの1次元リストを維持できるC++クラスを探しています。

各エクステントは(start,len)ペアとして定義されます。

リストにエクステントを追加して、それらを自動的に統合できるようにしたいと思います。つまり、リストにとが(0,5)あり、追加された場合、新しいリストには。のみが含まれる必要があります。(10,5)(5,5)(0,15)

エクステントがリストから削除されることはありません。

このようなものはありますか?

ありがとう。

0 投票する
7 に答える
2135 参照

c++ - STLアルゴリズム:コンテナー用の追加のインターフェースがないのはなぜですか(イテレーターのペアに追加)?

なぜSTLがアルゴリズム関数をオーバーロードしないので、コンテナーを提供するだけでアルゴリズム関数を呼び出すことができ、begin+endイテレーターを渡すためのより冗長な方法をとらないのだろうかと思います。もちろん、コンテナ/配列のサブシーケンスを処理するためにイテレータペアも使用する理由は理解していますが、これらのメソッドへのほとんどすべての呼び出しは、コンテナ全体を使用しています。

書くだけの方が便利で、読みやすく、保守しやすいと思います。

STLがこれらのオーバーロードを提供しない理由はありますか?[編集:インターフェースをこの制限されたものに置き換えるのではなく、コンテナーベースの反復面を提供すること意味します!]あいまいさをもたらしますか?私はこのようなことを考えています:

私は何かが足りないのですか?

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

c++ - c ++ベクター内の構造体要素が等しいかどうかを検索する方法は?

という名前のクラスには、 s structSparseMatrixのベクトルがあります。Node インスタンスのとのメンバーが同じ場合、そのノードの値が に追加されるように、演算子Nodeをオーバーロードしたいと考えています。アルゴリズム ライブラリのメソッドを使用してこれを達成するにはどうすればよいですか?+=ijThis

関数に渡すために使用しようとしfind_ifましたが、1 つの反復子に対してのみ機能します。

基本的に、私は Node::samePosition() に 2 つのパラメーターを渡したいと考えています。現在のイテレーターが渡されるので、それらが等しいかどうかを確認できますfind_ifitOther

編集:関数を分離し、次samePositionを使用して2つのパラメーターを渡したいと思いますfind_if: