constexprサイズを指定する必要がない場合、std::array<...>
の最適な置き換えは何ですか?私はstd::vector
を使用してreserve(...)
を実行するのが最善であると考えましたが、多分私は何かを見落としていますか?std :: arrayのC++置換
答えて
はい、std::vector
を使用し、[ "とても遅い標準コンテナであるのはなぜ?" の下を参照してください]。だから、
あなたのコードが
std:array<int, 42> my_array;
std:vector<int> my_array(42);
ノートでそれを置き換えている場合:それは空のvector
を離れるので、あなたはおそらく、reserve
を使用する必要はありません。 std::array
を使用している場合、コードに空の配列の概念がないため、構築時に塗りつぶされたstd::vector
インスタンスで最もよく表現され、サイズは変更されません。
'std :: vector
この小さな問題は、ベクトルをゼロで塗りつぶすのに対し、例の配列の宣言では初期化されていないということです。これは、ベクトルが大きなサイズを持つことが予想される場合には重要です。 – Ruslan
std::vector
は、実行時にサイズを決定する必要がある場合は、適切なコンテナである必要があります。
std::vector<>
おそらくあなたの答えです。私はちょうどreserve()
がどんなスピードアップを保証すると仮定しないでしょう。
ビャーネ・ストロヴストルップは:
人々は時々インクリメンタル を成長のstd ::ベクトルのコストを心配します。私はそのことを心配していましたが、 にはreserve()を使って成長を最適化しました。私のコードを測定して、実際に プログラムでreserve()のパフォーマンス上の利点を見つけるのに苦労して を持っていたら、 イテレータの無効化(私のコードではまれなケース)を回避する必要がある場合を除いて、再び: の前に測定して最適化します。
私はほとんどの場合、 'reserve'を呼び出すことはスピードアップを保証することではないことを示しています(コールを省略するとそのSTLが"減速を保証する "ということを意味します)。明らかです。何らかの理由でそれをそのサイズに構築することはできませんが、それを満たすために繰り返しの 'push_back'が必要な場合でも、割り当て時間にベクトルの正確な大きさを知ることがよくあります。そして、 'reserve'を呼び出さないと、一致が見つかったときに線形検索を中断しないようになります。スピードアップは小さいかもしれませんが、改善は明らかです。 –
- 1. C++ doubleをcharに置き換えてstd :: arrayに置き換えます。
- 2. C++ 11 std :: array
- 3. System :: arrayをstd :: vectorに変換する
- 4. C++ 14コンパイル時std :: array with variadic templates
- 5. std :: arrayをstd :: vectorに変換するには?
- 6. 2D char * arrayの文字列値の置き換えc/java jni
- 7. C++ std :: array <std :: string、4>をcythonで返すラッピングメソッド
- 8. std :: array in template specialization
- 9. std :: arrayを返す
- 10. std :: arrayに追加
- 11. 多次元std :: array
- 12. std :: array <float, 4> to std :: array <double, 4>キャスト
- 13. std :: array-likeクラスのコピーコンストラクタ
- 14. C++の最初のN要素を反復する11 std :: array
- 15. unspecializedテンプレートクラスを持つstd :: array
- 16. 厳密なエイリアシングとstd :: arrayとCスタイルの配列
- 17. std :: array iteratorテンプレートなしの範囲ですか? Cアレイと
- 18. C#でMultiDimensional ArrayをSingle Dimensional Arrayに変換する方法は?
- 19. 文字の置換とCの置換
- 20. g ++コマンドラインで-std = C++ 11の位置
- 21. C++ - 型* = std :: array <type> :: iteratorと仮定できますか?
- 22. の変換C++のstd :: wstringのにUTF8でのstd :: codecvt_xxx
- 23. std :: array:スマートポインタによる要素のアクセス
- 24. クラスのテンプレートパラメータとしてstd :: array
- 25. 検索/置換boost regex C++
- 26. std :: valarrayとstd :: arrayの違いは何ですか
- 27. std :: arrayの動作<bool>とstd :: vector <bool>
- 28. C#Generics - array?
- 29. C++のstd :: vectorをstd :: vector <unsigned char>に変換する
- 30. C++ std :: find開始位置を指定
固定サイズ['std :: dynarray'](http://en.cppreference.com/w/cpp/container/dynarray)の提案がありました。残念ながら、それはC++ 14にはなりませんでした。 – juanchopanza
委員会はなぜそれを受け入れることを決定しなかったのですか?私はそれが実験的であることを見て、それはおそらくまだチャンスを立てていることを意味します。 –