問題タブ [stdarray]
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::array とバイトの読み取り
C++ で C スタイルを使用せず、代わりに std::array、std::vector、std::string などのコンテナーを使用することについて多くのことを読みました。
現在、ファイルストリームを使用して小さなバイナリファイルを読み書きし、std::array に保存しようとしています。
std::fstream の読み取りおよび書き込みメソッドは、C スタイルの配列でのみ機能するようです...
だからこれは私が考えていることです:
byte_t は単なる
できます。しかし、これはそれを行う良い方法ですか?いいえの場合、それを行う他の方法は何ですか? 代わりに byte_t [] を使用する必要がありますか?
c++ - クラス コンストラクターでクラスの std::array を初期化する
別のクラスのコンストラクター内でオブジェクトの std::array を初期化しようとしています。ここでは集計の初期化が機能するはずですが、適切な構文がわかりません。どうすればこれを行うことができますか?
c++ - std::array から範囲を読み取る
次元が異なる可能性のある std::array を受け入れるにはどうすればよいですか? これはコンパイル時にわかるはずですが、以下は機能しません
また、 end-start == n であることも知っているので、何らかの形でテンプレート化される可能性があります。
c++11 - std::array を std::vector に移動することは可能ですか?
std::array
これは、スタック メモリとヒープ メモリの相互作用、およびstd::vector
クラスを介してスタックからヒープに移動する特定のケースに関する質問です。
原則std::array<T>
として、最初の要素へのポインターと、配列のサイズに関するコンパイル時の情報を加えたものと見なすことができます。std::vector<T>
その事実を考慮して、ポインターをコピーするだけarray
での内容をに移動しようとするコンストラクターを持つことは可能でしょうか。vector
ユースケースは、std::array<double, >
std::array<double, 20> fun(){...};
std::vector
しかし、要素ごとにコピーする必要なく、後でそれを a に割り当てることにしました。
std::vector<double> v = fun(); // not working code
今、やらなければならないこと
実際には、これが可能であれば不要な冗長な作業を行いますstd::vector<double> v(std::move(tmp)); \\ not working code
。
std::vector
とのメモリ配置はstd::array
同じなので、 と の障害ではありません。
主な障害は、std::array
要素がスタックにあり、std::vector
要素がヒープにある可能性があることを理解しています。ムーブ コンストラクターを記述してもstd::vector
、スタックからのメモリが取り返しのつかないほど破壊されることは明らかです。
したがって、この質問は次のようにも読めると思います。
メモリをスタックからヒープに移動する方法はありますか (それが何を意味するにせよ)、それを移動コンストラクタと組み合わせることができるかどうかは?
またはstd::vector
、原則として移動コンストラクターをstd::array
?
MWE:
c++ - コンパイル時に std::array の各要素を乗算する
std::array
を別のに変換しstd::array
、その各要素に特定の数を掛けたいと思います。
私が今持っているものは明らかに機能しません:
私の質問は、コンパイル時に各要素を反復処理するにはどうすればよいですか、またはコンパイル時に同じ関数 (私の場合は 2 を掛ける) を適用するにはどうすればよいですか?
c++ - このスニペットの何が問題になっていますか?
このスニペットの何が問題なのかわかりません。次のエラーが表示されます。
エラー: メンバー関数 'swap' は実行できません: 'this' 引数の型は 'const array' ですが、関数は const とマークされていません
getArrElement
const
配列を返していません。auto
と推測されるべきですstd::initializer_list
が、私はそれにも害はないと思います。
どうしたの?
c++ - boost::spirit を std::array で構造体に解析する
私は boost::spirit を使用して、テキストを固定サイズの配列を含む構造体に解析しています。の例に従いながら
std::array (またはboost::array) を含む構造体に解析するためにそれを使用しようとすると、BOOST_FUSION_ADAPT_STRUCTがどのように機能するかのために、ヘルパーresult_of::adapt_array< some_array_type >::typeを構造体も。
BOOST_FUSION_ADAPT_ADTを使用してラッパーを作成することは可能だと思いますが、構造体の小さなアダプター オーバーヘッドを取り除くだけではやり過ぎのようです。私はそれの多くのインスタンスを持っていないので、メモリの観点からそれと一緒に暮らすことができますが、ノイズも発生します.
また、ノイズの一部を隠すために配列型をカプセル化するのではなく、配列型から派生するアダプターを作成することも可能だと思いますが、既存のすべての構造体を変更する必要があり、パーサーのオーバーヘッドが外部に漏れます。いい解決策。
私が間違っていることは明らかですか、それともパーサーにカプセル化できるようにバックグラウンドでオーバーヘッドをルーティングする新しいヘルパーが存在しますか?
Boost::spirit::x3 の属性として std::array を使用することを認識して います。
これが私の現在のコードです:
c++ - std::arrays c++11 のペアでマップを初期化する
この行をコンパイルしたいと思います。std::array のペアをマップするために挿入します。
c++ - 定数変数がコンパイル時の定数として扱われない理由
私は2つの異なるシナリオを実行しようとしました:
シナリオ 1:
ここで、 arraySize はコンパイル時の定数として扱われるため、 std::array で許可されました。
シナリオ 2:
シナリオ 2 では、arrySize が sz の定数コピーであるにもかかわらず、arraySize はコンパイル時定数として扱われません。
これら 2 つのシナリオの扱いが異なるのはなぜですか?