По порядку Middle Слайсы и мапы изнутри обновлено
Шаги append при нехватке ёмкости
Вопрос
Расставьте по порядку, что происходит в s = append(s, x), когда len(s) == cap(s).
Попробуйте сами
Расставьте шаги по порядку стрелками.
- 1Старые элементы копируются в новый массив
- 2Рантайм вычисляет новую ёмкость (рост с округлением под класс размера)
- 3append возвращает новый заголовок, и он присваивается в s
- 4Выделяется новый базовый массив
- 5Новый элемент записывается после скопированных
Показать ответ и разбор
Коротко
Сначала решается, сколько памяти нужно, затем она выделяется, копируются старые данные, дописывается элемент, и только присваивание результата делает новый слайс видимым в s.
Правильный порядок
- 1Рантайм вычисляет новую ёмкость (рост с округлением под класс размера)
- 2Выделяется новый базовый массив
- 3Старые элементы копируются в новый массив
- 4Новый элемент записывается после скопированных
- 5append возвращает новый заголовок, и он присваивается в s
Разбор
Сначала решается, сколько памяти нужно, затем она выделяется, копируются старые данные, дописывается элемент, и только присваивание результата делает новый слайс видимым в s.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Эвакуация бакетов при росте map
Следующий вопрос
Изменение элемента в range по слайсу структур
Ещё по теме «Слайсы и мапы изнутри»
- Разбить слайс на части по k на Go
- Удаление дубликатов с сохранением порядка на Go
- Группировка анаграмм на Go
- Циклический сдвиг слайса на Go
- Число подмассивов с суммой k на Go
- Топ-k частых слов на Go
- Что выведет Go: append при полной ёмкости
- Что выведет Go: два append в один подслайс