#include <iostream>
#include <valarray>
using namespace std;
typedef valarray<valarray<int> > va2d;
int main()
{
int data[][3] = { {1, 2, 3}, {4, 5, 6} };
va2d mat(valarray<int>(3), 2);
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < 3; ++j)
mat[ i ][ j ] = data[ i ][ j ];
}
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 3; ++j)
cout << mat[ i ][ j ] << endl;
}
詳細valarray
:
- 数値計算用に最適化されています。
- これは、
vector
スライスとダイシングのための特別なメンバー関数を備えたライク コンテナーです。
- イテレータなし
- ベクター マシン用に設計されており、現在のマシンではパフォーマンスが低い:
vector
アクセスが高速になる可能性がある
- すべてのコンパイラでサポートされているわけではありません (ドキュメントを確認してください) / 実装が不十分
- へのパラメーターとして使用できるタイプについては、26.1 を参照してください
valarray<T>
。
3 さらに、valarray の多くのメンバーおよび関連関数は正常にインスタンス化でき、T がそのようなメンバーまたは関連関数ごとに指定された追加要件を満たしている場合にのみ、明確に定義された動作を示します。
4 [ 例: valarray をインスタンス化することは有効ですが、complex には順序付け演算子がないため、valarray オペランドに対して operator>() は正常にインスタンス化されません。—終わりの例]
vector
編集#2:配列と同様に、常に連続したメモリを使用するという標準的な保証。また、次のものがあります。
26.5.2 クラス テンプレート valarray
1 クラス テンプレート valarray は 1 次元のスマート配列で、要素には 0 から順に番号が付けられます。これは、順序付けられた一連の値の数学的概念を表したものです。より高い次元の錯覚は、一般化された添え字演算子によって提供される強力なサブセット化機能とともに、計算されたインデックスの使い慣れたイディオムによって生成される場合があります。
そしてさらに:
26.5.2.3 valarray 要素へのアクセス
4 同様に、式 &a[i] != &b[j] は、任意の 2 つの配列 a および b と、任意の size_t i および size_t j について、i が a の長さよりも小さく、j が長さよりも小さいと評価されます。 bの。このプロパティは、エイリアシングが存在しないことを示し、最適化コンパイラによって有利に使用される場合があります。