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

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

c++ - std::array とバイトの読み取り

C++ で C スタイルを使用せず、代わりに std::array、std::vector、std::string などのコンテナーを使用することについて多くのことを読みました。

現在、ファイルストリームを使用して小さなバイナリファイルを読み書きし、std::array に保存しようとしています。

std::fstream の読み取りおよび書き込みメソッドは、C スタイルの配列でのみ機能するようです...

だからこれは私が考えていることです:

byte_t は単なる

できます。しかし、これはそれを行う良い方法ですか?いいえの場合、それを行う他の方法は何ですか? 代わりに byte_t [] を使用する必要がありますか?

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

c++ - クラス コンストラクターでクラスの std::array を初期化する

別のクラスのコンストラクター内でオブジェクトの std::array を初期化しようとしています。ここでは集計の初期化が機能するはずですが、適切な構文がわかりません。どうすればこれを行うことができますか?

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

c++ - std::array から範囲を読み取る

次元が異なる可能性のある std::array を受け入れるにはどうすればよいですか? これはコンパイル時にわかるはずですが、以下は機能しません

また、 end-start == n であることも知っているので、何らかの形でテンプレート化される可能性があります。

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

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:

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

c++ - コンパイル時に std::array の各要素を乗算する

std::arrayを別のに変換しstd::array、その各要素に特定の数を掛けたいと思います。

私が今持っているものは明らかに機能しません:

私の質問は、コンパイル時に各要素を反復処理するにはどうすればよいですか、またはコンパイル時に同じ関数 (私の場合は 2 を掛ける) を適用するにはどうすればよいですか?

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

c++ - このスニペットの何が問題になっていますか?

このスニペットの何が問題なのかわかりません。次のエラーが表示されます。

エラー: メンバー関数 'swap' は実行できません: 'this' 引数の型は 'const array' ですが、関数は const とマークされていません

getArrElementconst配列を返していません。autoと推測されるべきですstd::initializer_listが、私はそれにも害はないと思います。

どうしたの?

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

c++ - boost::spirit を std::array で構造体に解析する

私は boost::spirit を使用して、テキストを固定サイズの配列を含む構造体に解析しています。の例に従いながら

qi/boost_array.cpp

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 を使用することを認識して います。

実際の例

これが私の現在のコードです:

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

c++ - std::arrays c++11 のペアでマップを初期化する

この行をコンパイルしたいと思います。std::array のペアをマップするために挿入します。

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

c++ - 定数変数がコンパイル時の定数として扱われない理由

私は2つの異なるシナリオを実行しようとしました:

シナリオ 1:

ここで、 arraySize はコンパイル時の定数として扱われるため、 std::array で許可されました。

シナリオ 2:

シナリオ 2 では、arrySize が sz の定数コピーであるにもかかわらず、arraySize はコンパイル時定数として扱われません。

これら 2 つのシナリオの扱いが異なるのはなぜですか?