OpenSubdiv 的 Vtr.Array 是一种灵活的动态数组,可用于存储和管理 Vtr 顶点框架中的元素,包括顶点、边和面。它支持高效的随机访问和插入/删除操作,并具有附加元数据的能力。
template <typename T, int U = 4>
class Array {
public:
// 构造函数和析构函数
Array();
~Array();
// 拷贝和移动构造函数和赋值操作符
Array(Array&& src);
Array(const Array& src);
Array& operator=(Array&& src);
Array& operator=(const Array& src);
// 元素访问
const T& operator[](Index idx) const;
T& operator[](Index idx);
// 插入和删除操作
void clear();
void resize(Index size);
void resize(Index size, const T& value);
void reserve(Index capacity);
void append(const T& value);
void insert(const T& value, Index beforeIndex);
void remove(Index index);
// 容量和大小相关的函数
Index size() const;
Index capacity() const;
bool empty() const;
void shrink_to_fit();
// 其他操作
int find(const T& value) const;
void sort(bool reverseOrder = false);
};
T* _array;
Index _size;
Index _capacity;
_array
:指向数组的首个元素的指针_size
:数组中的元素数_capacity
:数组的当前容量Array()
构造函数
创建一个空的数组。
~Array()
析构函数
销毁数组并释放内存。
Array(const Array& src)
拷贝构造函数
使用给定的源数组创建一个新的数组。
Array(Array&& src)
移动构造函数
以源数组为基础创建一个新的数组,同时销毁源数组。
Array& operator=(const Array& src)
拷贝赋值操作符
将当前数组的内容替换为给定源数组的内容,并返回当前数组的引用。
Array& operator=(Array&& src)
移动赋值操作符
以源数组为基础,用其替换当前数组的内容,并返回当前数组的引用。
const T& operator[](Index idx) const
常量元素访问函数
返回位于给定索引 idx
处的元素,并不会对数组进行修改。
T& operator[](Index idx)
非常量元素访问函数
返回位于给定索引 idx
处的元素,并可能对数组进行修改。
void clear()
清空数组
从数组中移除所有元素并释放内存。
void resize(Index size)
修改数组大小
将数组的大小调整为给定的大小,并重新分配内存。如果 size
大于当前容量,则分配更多内存。
void resize(Index size, const T& value)
修改数组大小并设置元素值
与 resize(size)
相同,但还会将新插入的元素设置为 value
。
void reserve(Index capacity)
修改数组容量
将数组容量调整为给定的大小。
void append(const T& value)
追加元素
将元素 value
添加到数组的末尾。如果当前大小等于容量,则自动扩容。
void insert(const T& value, Index beforeIndex)
插入元素
将元素 value
插入到给定索引 beforeIndex
处,并将其余所有元素向右移动一位。如果当前大小等于容量,则自动扩容。
void remove(Index index)
移除元素
将给定索引 Index
处的元素从数组中移除,并将其余所有元素向左移动一位。如果当前大小小于容量,则自动缩小。
Index size() const
返回数组大小
返回当前数组中的元素数量。
Index capacity() const
返回数组容量
返回当前数组的容量。
bool empty() const
返回数组是否为空
返回当前数组是否为空。
void shrink_to_fit()
缩减数组容量
将数组容量调整为当前大小。
int find(const T& value) const
查找元素
在数组中查找给定的元素 value
。如果找到该元素,则返回其索引;否则返回 -1。
void sort(bool reverseOrder = false)
排序元素
根据元素类型,对数组中的所有元素进行排序。如果给定 reverseOrder
为 true,则按相反顺序进行排序。