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. C++ std :: array <std :: string、4>をcythonで返すラッピングメソッド
- 6. 多次元std :: array
- 7. std :: arrayを返す
- 8. std :: arrayに追加
- 9. std :: array <float, 4> to std :: array <double, 4>キャスト
- 10. std :: array-likeクラスのコピーコンストラクタ
- 11. unspecializedテンプレートクラスを持つstd :: array
- 12. C++の最初のN要素を反復する11 std :: array
- 13. 厳密なエイリアシングとstd :: arrayとCスタイルの配列
- 14. std :: array iteratorテンプレートなしの範囲ですか? Cアレイと
- 15. C#でMultiDimensional ArrayをSingle Dimensional Arrayに変換する方法は?
- 16. C++ - 型* = std :: array <type> :: iteratorと仮定できますか?
- 17. 文字の置換とCの置換
- 18. g ++コマンドラインで-std = C++ 11の位置
- 19. クラスのテンプレートパラメータとしてstd :: array
- 20. の変換C++のstd :: wstringのにUTF8でのstd :: codecvt_xxx
- 21. std :: valarrayとstd :: arrayの違いは何ですか
- 22. C#Generics - array?
- 23. C++ print 2d array
- 24. 検索/置換boost regex C++
- 25. C++のstd :: vectorをstd :: vector <unsigned char>に変換する
- 26. 別のstd :: arrayからstd :: arrayを初期化するための特定の構文はありますか?
- 27. std :: unordered_mapで使用されるstd :: arrayをハッシュします。
- 28. std :: sortを使ってstd :: arrayをソートする方法?
- 29. std :: array <T>初期設定
- 30. 2d std :: arrayを関数cppに渡す
固定サイズ['std :: dynarray'](http://en.cppreference.com/w/cpp/container/dynarray)の提案がありました。残念ながら、それはC++ 14にはなりませんでした。 – juanchopanza
委員会はなぜそれを受け入れることを決定しなかったのですか?私はそれが実験的であることを見て、それはおそらくまだチャンスを立てていることを意味します。 –