問題タブ [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 に答える
415 参照

c++ - Shunting Yard での括弧付き式の処理

括弧で囲まれた式を処理するために、次の手書きのループがあります。

(outputpunctuatorsはどちらも 型std::vector<token>で、は aとデータ メンバーで構成されるtoken非常に単純なものです。)structchar kindunsigned value

手書きのループからアルゴリズムに切り替えると可読性が向上するかどうか疑問に思っていました。

しかし、どういうわけか、おそらく逆イテレータの使用と、特に通常のイテレータへの変換が原因で、このコードはかなり読みにくいと感じています。より良い解決策はありますか?手書きのループの方が読みやすいと思いますか?それとも、アルゴリズムに関しては、まだ光が見えていないだけですか?

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

c++ - std::next_permutation実装の説明

実装方法に興味がstd:next_permutationあったので、バージョンを抽出しgnu libstdc++ 4.7、識別子とフォーマットをサニタイズして、次のデモを作成しました...

出力は期待どおりです:http://ideone.com/4nZdx

私の質問は次のとおりです:それはどのように機能しますか?i、、jの意味は何kですか?彼らは実行のさまざまな部分でどのような価値を持っていますか?その正しさの証明のスケッチは何ですか?

明らかに、メインループに入る前に、些細な0または1要素リストのケースをチェックするだけです。メインループのエントリで、iは最後の要素(1つ過ぎた端ではない)を指しており、リストは少なくとも2要素の長さです。

メインループの本体で何が起こっているのですか?

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

c++ - copy と back_inserter を使用して vector をそれ自体に追加すると、誤った結果が生じる

この質問に触発され、ベクトルをそれ自体に追加する方法を尋ねると、私の最初の考えは次のとおりでした(そして、はい、今insertではより良いオプションであることに気づきました):

ただし、これは次のように出力します。

* は、プログラムが実行されるたびに異なる番号です。2つしか入れ替わっていないのが異様で、実際にその説明があれば聞きたいです。続けて、別のベクトル (元のコピー) に追加すると、正しく出力されます。次の行を前に追加すると、正しく出力されますcopy

std::back_inserter事前にメモリを予約していなくても、コンテナーの最後に要素を追加する安全な方法であるという印象を受けました。私の理解が正しければ、コピー行の何が問題になっていますか?

コンパイラとは関係ないと思いますが、GCC 4.7.1 を使用しています。

0 投票する
6 に答える
639 参照

c++ - 動的サイズのオブジェクトを並べ替える

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

c++ - マップの各値に関数を適用して、並べ替えられたシーケンスを作成するにはどうすればよいですか?

C ++でSTLを使用して、aの各値に関数を適用して(値の印刷表現)std::mapを取得し、別の関数からの浮動小数点キーでソートされたコレクションに(s)を収集するにはどうすればよいですか?マップ内の対応する各値に適用されますか?std::stringstd::string

別の言い方をすれば、マップ内のキーと値のペアを繰り返し処理して、新しいキーと値が古い値の関数であるキーと値のペアの新しいセットを作成したいと思います。

ただし、C++11は使用しないでください。

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

c++ - remove_copy_if が空のベクトルを返すのはなぜですか?

次のコードで何が間違っているのか教えてください。2 番目のベクトルの値 >= 80 が期待されますが、空です。

0 投票する
6 に答える
6454 参照

c++ - std::fill などのアルゴリズムで emplace を使用する

vector::emplace_backベクトルの塗りつぶし中に一時的なオブジェクトの構築を避けるために使用しました。ここに簡略化されたバージョンがあります:

しかし、代わりに使用したかったstd::fill_n

ただし、この方法では、一時的なコピーが作成されます。emplaceこの状況での使い方がわかりません。のようなものが必要だと思いstd::back_emplacerますが、そのようなものが見つかりませんでした。それは C++11 の一部ですが、GCC にはまだ実装されていませんか? それが C++11 の一部でない場合、それを行う他の方法はありますか?

0 投票する
8 に答える
29713 参照

c++ - アルゴリズムを使用して元の順序を維持しながら、ソートされていないstd :: vectorから重複を削除するにはどうすればよいですか?

各整数の最初の出現順序を維持しながら、重複を削除する必要がある整数の配列があります。私はそれをこのように行うことを見ることができますが、STLアルゴリズムをよりよく利用するより良い方法があると想像しますか?挿入は自分の手に負えないので、挿入する前に重複をチェックできません。

STLアルゴリズムを使用してこれをどのように行うことができますか?

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

c++ - ポインターの std:vector で std::sort が失敗する

次のコードは、ベクターの並べ替え中にクラッシュします。

これはなぜですか?

0 投票する
4 に答える
3835 参照

c++ - std :: fill、std::copyはstd::vectorに特化しています

この質問について考えるとき、私は、std::copy()および/またはstd::fillに特化されている(私は本当に最適化されている)かどうか疑問に思い始めstd::vector<bool>ます。

これはC++標準で必要ですか、それともC ++ stdライブラリベンダーによる一般的なアプローチですか?

簡単に言えば、次のコードがあるかどうか知りたいです。

それよりも優れている/異なる:

非常に厳密に言うと、たとえば、次のようにできます。単一ビットではなく、バイト全体std::fill<std::vector<bool>::iterator>()の内部表現に移動して設定しますか?友達をstd::vector<bool>作ることは図書館のベンダーにとって大きな問題ではないと思いますか?std::fillstd::vector<bool>

[アップデート]

次の関連する質問:私(または他の誰か:)は、まだ専門化されstd::vector<bool>ていない場合、たとえば、そのようなアルゴリズムを専門化できますか?これはC++標準で許可されていますか?これは移植性がないことはわかっていますが、選択した1つの標準C ++ライブラリだけですか?私(または他の誰か)がstd::vector<bool>プライベートパーツに到達する方法を見つけたと仮定します。