1. ホーム
  2. c++

[解決済み] std::dynarray と std::vector の比較

2023-05-07 10:04:41

質問

C++14について std::dynarray :

std::dynarrayは、配列の構築時に固定されたサイズを持つ配列をカプセル化するシーケンスコンテナです。 配列のサイズは構築時に固定され、オブジェクトの寿命が尽きるまで変化しません。 オブジェクトのライフタイムを通して変化しません。

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

では、どのような利点があり、どのような使い方ができるかというと std::dynarray を使うことができるのに対して std::vector の方がよりダイナミック(かつリサイズ可能)なのでは?

どのように解決するのですか?

<ブロッククオート

の利点と使い方は? std::dynarray を使うことができるのでしょうか? std::vector の方がよりダイナミック(リサイズ可能)なのでしょうか?

dynarray よりも小さく、シンプルです。 vector よりも小さくシンプルです。なぜなら、サイズと容量を別々に管理する必要がなく、アロケータを保存する必要もないからです。

しかし、主な性能上の利点は、実装がアロケートすることが推奨されるという事実から来ることが意図されています。 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::dynarray を C++14 から削除し、配列拡張の TS (技術仕様) 文書を別途発行して std::experimental::dynarray および Array of Runtime bound (ARBs, C99 VLAs に類似) を定義する TS (Technical Specification) 文書を別途発行することになりました。 std::dynarray が C++14 に含まれないことはほぼ確実です。