6

はい、これは以前に質問されており、答えは次のとおりです。

valarrays (値配列) は、Fortran の速度の一部を C++ にもたらすことを目的としています。valarrayコンパイラーがコードに関する仮定を作成し、より適切に最適化できるように、ポインターを作成しないでください。(Fortran が非常に高速である主な理由は、ポインター型がないため、ポインターのエイリアシングが発生しないためです。)

また:

valarrayまた、エイリアシングの可能性を排除することになっています [...]

しかし、これらの答えは私には意味がありません。

valarrayvectorクラス テンプレートであり、インスタンス化されるまで存在しません。
そしてもちろん、 avector<int>はエイリアシングの問題を引き起こすことはありませんvalarray<int>

これを考えると、 の目的は何でしたか?valarrayまた、なぜ同じ機能を単純に に入れなかったのvectorですか?

4

2 に答える 2

11

関心の分離?Avectorと a は、valarrayさまざまな問題を解決します。規格から引用すると、 avectorは ( §23.3.6.1 [vector.overview] p1)

... ランダム アクセス イテレータをサポートするシーケンス コンテナ。さらに、最後に(償却された)一定時間の挿入および消去操作をサポートします。途中での挿入と消去には線形時間がかかります。ストレージ管理は自動的に処理されますが、効率を改善するためのヒントを与えることができます。

avalarrayは ( §26.6.2.1 [template.valarray.overview] p1)

... 要素がゼロから順に番号付けされた 1 次元のスマート配列。これは、順序付けられた一連の値の数学的概念を表したものです。より高い次元の錯覚は、一般化された添え字演算子によって提供される強力なサブセット化機能とともに、計算されたインデックスの使い慣れたイディオムによって生成される場合があります。

ご覧のとおり、これらは異なる目的を果たします。Avectorは一般化された動的配列で、 avalarrayは一連の値を表します。また、サイズ変更はできず、割り当てのみ可能です。

于 2012-09-25T10:11:26.847 に答える
6
  • valarray にはスライス機構があります

  • valarray は、その数値演算子の式テンプレートを使用して実装されることが期待されています

于 2012-09-25T10:07:12.137 に答える