問題タブ [boost-range]
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++ - boost :: any_rangeを使用する利点は何ですか?
使用する利点は何boost::any_range
ですか?次に例を示します。
ただし、ForwardRangeの概念を満たすテンプレートパラメータを使用すると、より効率的な同じ機能を実現できます。
したがって、any_rangeを使用する価値があるシナリオを探しています。多分私は何かが欠けています。
c++ - ブースト範囲ライブラリは、次の C++ 標準の一部になる予定ですか?
コードで範囲ベースのアルゴリズムを使用できるかどうかを判断しようとしています。C++ 標準の一部である可能性が高い場合は、新しいコードでブーストから使用できます。イテレーターよりもはるかに優れているように見えますが、他のユーザーがプロジェクトをレビューして貢献するのが難しくなる可能性があります。ここの論文のリストには見つかりませんでした。http://www.meetingcpp.com/
c++ - ディレクトリ反復子範囲でブースト範囲アダプターを使用する
編集:ジョナサンの回答に基づいて、質問の下にいくつかの解決策を追加しました
特定のディレクトリに特定の名前パターンを持つ通常のファイルのリストが必要です。boost.filesystem (boost 1.53)から例の 1 つを取得し、それを変更しました。ここに私が基本的に欲しいものの実用的なバージョンがあります:
これにより、 で終わるすべてのファイルのエントリ.dat
がディレクトリ エントリのリストに追加されます。後でさらにパターン マッチングが必要です。次に、範囲で同じことをしようとしましたが、失敗しました。タスクを単純にすべてのディレクトリ エントリをコピーするように減らしましたが、これもコンパイルされません。
(boost.filesystemのtut3.cpp)ので、このように書きました
directory_iterator::value_type は directory_entry です
そのコピーが範囲を反復処理し、エントリを取得してリストに保存できるようにします。ただし、gcc から多くのエラー メッセージが表示されます。
関連する行を実際にフィルターで除外することはできませんでしたが、範囲アダプターを使用してファイルをフィルター処理することは可能だと思います (結局のところ、範囲をコピーしたいだけではありません)。私の印象では、どこかdatFiles.begin()
でコピー アルゴリズムが必要とする概念を満たしていないということです。
私の解決策のいくつか
ジョナサンの答えに基づいて、私が思いついたソリューション(フィルタリングを含む)のいくつかを次に示します。
グローバル述語関数の使用bool isDatFile(const path& p)
:
でも、私はローカル関数の方が好きだったので、それを試してみました。これは、ディレクトリエントリが通常のファイルであるかどうかを確認するだけです。is_regular_file
オーバーロードされているため、静的キャストが必要でした:
範囲アダプターで正しい拡張子を確認するのも少し大変だったので、ローカル関数を追加しました。
最後に、バインドを使用した「ワンライナー」:
c++ - 2 つの STL のようなコンテナー (デカルト積) を反復処理する方法
BOOSTで以下を減らしたい
2 つのループを 1 つの構造 (Boost.Foreach、Boost.Range、Boost.Iterator など) にカプセル化することを意味します。私が見たいのは次のようなものです(これは単なるアイデアであり、私が見たいものとは異なります)
それはどのように行うことができますか?
EDIT:ちなみに、Pythonでは次のように書くことができます
c++ - c++: バイナリ関数でブースト範囲変換アダプターを使用する
2 つの std::vectors x と y とバイナリ関数 F があるとします。z の i 番目の要素が F をx と y の i 番目の要素。とりあえず使ってる
もちろん、これには z のメモリ割り当てが必要です。ただし、私の目標は、このメモリ割り当てを回避し、boost::adaptors::transformed が単項関数で行うのと同様に、変換を遅延評価することです。つまり、z の型は、boost::range の型になります。これを行う簡単な方法はありますか、それとも独自の範囲クラスを作成する必要がありますか? 前もって感謝します!
c++ - C++ インターフェイスで Boost.Range を使用する
私は多態的なインターフェースを持っています
両方の範囲の要素は同じ型 (例: ) ですが、 byと by によってint
返される型は異なります。たとえば、一方が aで、もう一方が aです。インターフェイスには、単一のタイプが必要です。my_range()
some_range()
filtered counting range
transformed filtered counting range
Range
使用してみましboost::any_range
たが、パフォーマンスが大幅に低下します。vector
範囲要素を a にコピーして、代わりにベクトルを返す必要は避けたいと思います。
any_range
コピーの代替手段はありますか?
visual-c++ - ブースト文字列アルゴリズム ライブラリで MFC CString を使用する方法
予備的な注意: string_algo は問題なく動作しstd::wstring
、string_algo のアルゴリズムが必要な場合は、最初に CString オブジェクトを std::wstring に変換できます (そして変換します)。ただし、CString オブジェクトをドロップできれば、非常に便利です。既存のコードとの統合がはるかに簡単になります。
私がしたいこと:
ここで提案されboost/range/mfc.hpp
ているように、 Boost.Range を MFC に適合させるために追加で含めようとしました。(私はこのヘッダーをよく見ていませんが、CString に対しては何もせず、コレクション クラスに対してのみ行うようです。)
Visual Studio 2005 で 1.44.0 をブースト
テスト コードは次のようになります。
私が得るエラーは次のようになります: