Ответ
Амортизированная сложность O(1).
- Если в буфере (
Array,Data,ContiguousArray) достаточно емкости (capacity), операцияappend(_:)выполняется за константное время. - Если места нет, происходит реаллокация с выделением большего блока памяти и копированием всех существующих элементов — операция O(n). Однако стратегия роста емкости (обычно удвоение) делает такие дорогостоящие операции редкими, обеспечивая амортизированную O(1).
Пример:
var buffer = [1, 2, 3] // Начальная емкость может быть 3 или больше
buffer.append(4) // O(1), если capacity >= 4
Нюансы:
ContiguousArrayгарантирует O(1) дляappend, когда есть свободная емкость, так как элементы хранятся в непрерывной области памяти.Dataведет себя аналогичноArray.- Для буферов фиксированного размера (например,
UnsafeMutableBufferPointer) операция добавления не предусмотрена — требуется ручное управление памятью.