The requested number of elements to store. 依頼された格納される要素数。
reserveCapacity(_:)
Availability
- iOS 8.0+
- iPadOS 8.0+
- macOS 10.10+
- Mac Catalyst 13.0+
- tvOS 9.0+
- watchOS 2.0+
- Xcode 6.3+
Technology
- Swift Standard Library Swift標準ライブラリ
Declaration 宣言
mutating func reserveCapacity(_ minimumCapacity: Int
)
Parameters パラメータ
minimumCapacity
Discussion 解説
If you are adding a known number of elements to an array, use this method to avoid multiple reallocations. This method ensures that the array has unique, mutable, contiguous storage, with space allocated for at least the requested number of elements. あなたが数のわかった要素を配列に加えているならば、このメソッドを使って複数の再割り当てを避けてください。このメソッドは、配列が、少なくとも要請された数の要素に割り当てられた空間とともに、固有な、可変の、隣接するストレージを持つことを保証します。
Calling the reserve
method on an array with bridged storage triggers a copy to contiguous storage even if the existing storage has room to store minimum
elements.
reserve
メソッドをブリッジされたストレージを持つ配列で呼び出すことは、隣接ストレージへのコピーを引き起こします、たとえ既存のストレージにminimum
要素を格納する余地があるとしてもです。
For performance reasons, the size of the newly allocated storage might be greater than the requested capacity. Use the array’s capacity
property to determine the size of the new storage.
性能上の理由から、新しく割り当てられたストレージは要請された容量より大きいかもしれません。配列のcapacity
プロパティを使って新しいストレージの大きさを特定してください。
Preserving an Array’s Geometric Growth Strategy 配列の幾何数級的増大戦略を守る
If you implement a custom data structure backed by an array that grows dynamically, naively calling the reserve
method can lead to worse than expected performance. Arrays need to follow a geometric allocation pattern for appending elements to achieve amortized constant-time performance. The Array
type’s append(_:)
and append(contents
methods take care of this detail for you, but reserve
allocates only as much space as you tell it to (padded to a round value), and no more. This avoids over-allocation, but can result in insertion not having amortized constant-time performance.
あなたが動的に増大する配列によって裏打ちされる誂えのデータ構造を実装するならば、無邪気にreserve
メソッドを呼び出すと予想される性能よりずっと悪くなります。ならし定数時間性能を達成するために、配列は要素を追加するのにある幾何数級的なアロケートパターンに従う必要があります。Array
型のもつappend(_:)
とappend(contents
メソッドは、この詳細をあなたの代わりに面倒を見ます、しかしreserve
はあなたがそれに伝える(ある丸め値に詰め込まれた)のと同じ程度の空間だけをアロケートして、それ以上は何もしません。これは過度のアロケーションを防ぎます、しかし挿入においてならし定数時間性能を持たない結果になります。
The following code declares values
, an array of integers, and the add
function, which adds ten more values to the values
array on each call.
以下のコードは、整数の配列values
、そして呼び出し毎に10個さらに値をvalues
配列に加えるadd
関数を宣言します。
The call to reserve
increases the values
array’s capacity by exactly 10 elements on each pass through add
, which is linear growth. Instead of having constant time when averaged over many calls, the function may decay to performance that is linear in values
. This is almost certainly not what you want.
reserve
を呼び出すことは、values
配列の容量を正確に10要素ずつadd
が行われる各々で漸増します、それは線形成長です。多くの呼出しの全体を平均したとき定数時を持つのではなく、values
において線形である性能を関数が衰えさせるかもしれません。これはほとんど疑いなくあなたが望むことではありません。
In cases like this, the simplest fix is often to simply remove the call to reserve
, and let the append(_:)
method grow the array for you.
このような場合に、最も簡単な修正はしばしば単純にreserve
の呼出しを取り除いて、そしてappend(_:)
メソッドがあなたの代わりの配列を成長させるようにしてください。
If you need more control over the capacity of your array, implement your own geometric growth strategy, passing the size you compute to reserve
.
あなたがあなたの配列の容量に関してより制御を必要とするならば、あなた独自の幾何数級的戦略を実装して、あなたが算出する大きさをreserve
に渡してください。
Complexity: O(n), where n is the number of elements in the array. 計算量:O(n)、ここでnは配列の中の要素数です。