すでにメモリが確保されている領域を参照するクラスです。内部に配列の先頭を指すポインタと、要素数を持っています。
C# の Span<T>
、C++20 の std::span<T>
と同じ機能です。
メンバの配置は次のようになっています。
template <typename T>
struct ArrayView
{
T* data;
size_t size;
};
テンプレート引数に要素の型を指定します。
Udon::ArrayView<int> view;
配列の参照から
int array[100];
Udon::ArrayView<int> view{ array };
アロケート先を指すポインタと要素数から
size_t size = 100;
int* array = new int[size];
Udon::ArrayView<int> view{ array, size };
std::vector<T>
から (上と同じくポインタ、要素数から構築)
std::vector<int> vector{ 0, 1, 2, 3, 4, 5 };
Udon::ArrayView<int> view{ vector.data(), vector.size() };
for (auto&& it : view)
{
it = 100;
}
view[2] = 100; // ランダムアクセスOK
使用可能なイテレーターは
iterator
const_iterator
reverse_iterator
const_reverse_iterator
です。