問題タブ [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 投票する
7 に答える
51958 参照

stl - カスタムクラスオブジェクトのベクトルでstd::find / std :: find_ifを使用する方法は?

と呼ばれるユーザーを表すクラスがあり、そのクラスでNick使用std::find_ifしたいのですが、userlistベクトルに、渡したのと同じユーザー名のオブジェクトが含まれているかどうかを確認しますNick。テストしてオーバーロードし、オブジェクト== operatorで使用しようとしているユーザー名:find/find_if

オーバーロードした== operatorので、Nick == Nick2を比較すると機能するはずですが、関数はを返しますerror C2678: binary '==' : no operator found which takes a left-hand operand of type 'Nick' (or there is no acceptable conversion)

参考までに、私のNickクラスは次のとおりです。

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

c++ - istream_iteratorは無効なデータを解析しようとします

こんにちは、私は誰かが以下のコードのこの振る舞いを理解するのを手伝ってくれることを望んでいました。

これは機能しますが、いくつか質問があります。すべての有効な反復が行われた後、それは頭に行き、必然的に失敗する別の反復を解析しようとします(したがってif(!is.good())..._)。解析を試みますが、最終的な不正な構造体をラムダ式に渡すことはありません。なんでそうじゃないの?ストリームがgood()ではないので、わざわざそれを渡そうとしないからですか?

また、最終的な構造体をわざわざ解析しようとしないようにするにはどうすればよいですか(各スタンザは改行(0x0a)で終わるので、改行までストリームを無視すると、最後の有効な反復でEOFが発生すると思いましたしかし、そうではありません。

ご指導ありがとうございます。

また、別のコーディングの正しさのコメントを自由に渡してください。

PS:私のファイルはこのように見えます

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

c++ - C++ 配列から重複を削除するにはどうすればよいですか?

構造体の配列があります。配列のサイズは N です。

配列から重複を削除したい。つまり、インプレース変更を行い、配列を変換して各構造体の外観を 1 つにします。さらに、新しいサイズ M (削減された配列の最大インデックス) を知りたいです。

構造体にはプリミティブが含まれているため、それらを比較するのは簡単です。

C ++で効率的に行うにはどうすればよいですか?

次の演算子を実装しました。

ただし、実行時にエラーが発生します。

ここで何が問題なのですか?

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

c++ - ペア ベクトル c++ の上限

ペア ベクトルを並べ替え、ペア内のベクトルの 1 つの upper_bound の値を取得しようとしていますが、位置 = 0 で upper_bound が得られます。

私はC ++の初心者であり、学びたいと思っています。このコードの修正にご協力ください。ありがとうございました

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

multithreading - 移動コンストラクターがfill_nで呼び出されないのはなぜですか

私が得るエラーは、fill_n以下の行が削除されたコピーコンストラクターを使用しようとしていることを示しています:なぜそれは移動コンストラクターを使用しようとしないのですか?私はそれを包んでみましたstd::moveが、それは役に立ちませんでした。

ただし、fill_n行をに変更すると

それはうまくいきます。これらは、以前に似たようなコードで変更を加えたのと本質的に同じだと思いました。

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

c++ - stdlibの「一意の」メソッドが機能しない

uniqueC ++標準ライブラリアルゴリズム(を使用)を使用しようとしていますBinaryPredicate

ペアのベクトルを作成しました。各ペアは「(first = 4つのdoubleのベクトル、second =整数)」のようなものです。2番目の要素はインデックスとして機能するため、 `uniqueを使用した後でも、元のインデックスを確認できます。

以下の例では、次のようなものを作成しました。



次に、一意の関数を使用して、各ペアの最初の要素のみを比較します。カスタマイズバイナリ予測子を使用しましたuniquepred。確かに、それは機能しますが、ベクトルは使用後に縮小されませんunique

期待される結果

実結果

最小限の作業例を次に示します。これをデバッグするのを手伝ってください。

0 投票する
3 に答える
1514 参照

c++ - クイックソートイテレータの要件

tl;dr: 双方向リンク リストに効率的にクイックソートを実装することは可能ですか? それについて考える前の私の理解は、いや、そうではありませんでした。

先日、基本的なソート アルゴリズムのイテレータ要件について検討する機会がありました。基本的な O(N²) のものはかなり簡単です。

  • バブル ソート - 2 つの順方向イテレータが適切に機能し、一方が他方をドラッグします。
  • 挿入ソート - 2 つの双方向反復子で十​​分です。1 つは順不同の要素用、もう 1 つは挿入ポイント用です。
  • 選択ソート - 少しトリッキーですが、前方イテレータがそのトリックを実行できます。

クイックソート

std::sort の introsort_loop (gnu 標準ライブラリ/ hp(1994) / Silicon Graphics(1996) など) では、random_access である必要があります。

私が期待するようになったように。

よく調べてみると、クイックソートにこれを必要とする本当の理由が見つかりません。random_access_iterators を明示的に必要とする唯一のものstd::__medianは、中間要素の計算を必要とする呼び出しです。通常のバニラのクイックソートは中央値を計算しません。

パーティショニングはチェックで構成されています

双方向の有用なチェックではありません。ただし、これを前のパーティショニング トラベル (左から右/右から左) のチェックに置き換えることができるはずです。単純な条件は次のとおりです。

双方向イテレータのみを使用してかなり効率的にクイックソートを実装することは可能ですか? 再帰的な深さは引き続き保護できます。

注意。私はまだ実際の実装を試みていません。

0 投票する
3 に答える
1149 参照

c++ - コンテナ内のすべてのオブジェクトを削除するSTLアルゴリズム?

delete *the_object_iterator;すべてのオブジェクトに対して実行する STL ユーティリティ/アルゴリズムはありますか? clear()無事に行けるように?STL コンテナは でset、オブジェクトは で作成された C++ クラスへのポインタnewです。

ブーストが最適なソリューションのようです。私の目標は、コピー不可能なクラスでのコピー構築を避けることでした。

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

c++ - C++ での for_each の使用法

基本的に、私は各Abstractオブジェクトのデストラクタを呼び出そうとしていm_abs_listます. forこれは、ループによって簡単に実現できます。しかし、私はfor_eachこの文脈で使用しようとしています。

コンパイル時にエラーが発生します:

コンパイルエラーを回避するにはどうすればよいですか?