87

C++14 が提供するものstd::dynarray:

std::dynarray は、構築時に固定され、オブジェクトの存続期間を通じて変更されないサイズで配列をカプセル化するシーケンス コンテナーです。

std::dynarrayと同じように実行時に割り当てる必要がありますstd::vector

std::dynarrayでは、 whileの利点と使用法はstd::vector何ですか?

4

2 に答える 2

96

では、より動的な (サイズ変更可能)std::dynarrayを使用できる場合、 の利点と使用法は何ですか?std::vector

dynarrayvectorは、サイズと容量の値を個別に管理する必要がなく、アロケータを格納する必要がないため、 よりも小さくて単純です。

ただし、主なパフォーマンス上の利点はdynarray、ヒープ割り当てを回避して、可能な場合はスタックに割り当てることが実装で推奨されるという事実から得られることを意図しています。例えば

std::dynarray<int> d(5);   // can use stack memory for elements
auto p = new std::dynarray<int>(6);  // must use heap memory for elements

この最適化にはコンパイラの協力が必要であり、純粋なライブラリ型として実装することはできず、必要なコンパイラの魔法が実装されておらず、それがどれほど簡単かは誰にもわかりません。実装経験が不足しているため、先週シカゴで開催された C++ 委員会の会議で、std::dynarrayC++14 からプルし、別の配列拡張 TS (技術仕様) ドキュメントを定義std::experimental::dynarrayして実行時バインド (ARB、類似の配列) を発行することが決定されました。 C99 VLA に。) これはstd::dynarray、ほぼ確実に C++14 にないことを意味します。

于 2013-10-01T08:39:59.227 に答える