由于默认构造的数组不分配内存,因此松弛度最初为零。GetSlack
您可以使用该函数找出数组中有多少松弛。在容器重新分配之前,数组可以容纳的最大元素数可以通过Max
函数获得。GetSlack
相当于 和 之间的Max
差Num
:
TArray<int32> SlackArray;
// SlackArray.GetSlack() == 0
// SlackArray.Num() == 0
// SlackArray.Max() == 0
SlackArray.Add(1);
// SlackArray.GetSlack() == 3
// SlackArray.Num() == 1
// SlackArray.Max() == 4
SlackArray.Add(2);
SlackArray.Add(3);
SlackArray.Add(4);
SlackArray.Add(5);
// SlackArray.GetSlack() == 17
// SlackArray.Num() == 5
// SlackArray.Max() == 22
以上为TArray的自动扩容
有一个Reset
与 Empty 类似的函数,除了如果当前分配已经提供了请求的 slack,它不会释放内存。但是,如果请求的 slack 较大,它将分配更多内存:
SlackArray.Reset(0);
// SlackArray.GetSlack() == 3
// SlackArray.Num() == 0
// SlackArray.Max() == 3
SlackArray.Reset(10);
// SlackArray.GetSlack() == 10
// SlackArray.Num() == 0
// SlackArray.Max() == 10
最后,您可以使用该函数删除所有 slack,该Shrink
函数会将分配的大小调整为容纳当前元素所需的最小大小。Shrink
对数组中的元素没有任何影响:
SlackArray.Add(5);
SlackArray.Add(10);
SlackArray.Add(15);
SlackArray.Add(20);
// SlackArray.GetSlack() == 6
// SlackArray.Num() == 4
// SlackArray.Max() == 10
SlackArray.Shrink();
// SlackArray.GetSlack() == 0
// SlackArray.Num() == 4
// SlackArray.Max() == 4