Там обсуждается домашнее задание для студентов: нужно реализовать аналог std::string, который реализует подход copy-on-write (копирование при записи), при котором строки при копировании не создают новый буффер, а начинают совместно владеть им (это более дешёвая операция). И реальное копирование происходит только в тот момент, когда (и если) одну из этих строк пытаются изменить.
лекция хорошая, но вот то что вы пишите мелом на доске, выглядит как то странно да еще и плохо видно. Я думаю проще было бы на компьютере печатать и выводить это все.
Александр, большое спасибо за Ваши лекции! Можно, пожалуйста, разъяснить последний момент с трюком по уменьшению capacity? Про свап изначального контейнера "v" с временным объектом. Правильно ли я понимаю, что здесь вся суть сводится именно к обмену УКАЗАТЕЛЕЙ. Т.е. итераторы(начальный и конечный в случае c vector) во временном объекте, после свапа, указывают на область, которая была аллоцирована изначальным объектом "v". Соответственно она и высвобождается. А та область, которая была выделена временным объектом при его инициализации, поддерживается впредь объектом "v". Я прав? По такой логике вещей, capacity это далеко не просто какой-то член объекта, который изменяется при непосредственном выделении памяти для контейнера. Верно? P.S. пока писал этот вопрос. любопытство заставило взглянуть "под капот" capacity: size_type capacity() const _NOEXCEPT { // return current length of allocated storage return (this->_Myend() - this->_Myfirst()); } Было бы здорово, если на последующих лекциях по этой теме вы сделаете на этом небольшой акцент. Премного благодарен!!!
+Евгений Ш. Внутри swap-а будет произведён обмен указателей. Итераторы тут ни при чём, они создаются по запросу и после выполнения данной операции они все инвалидируются. В остальном, да, Вы правы - v обменивается областью памяти с временным объектом (который является копией v). > По такой логике вещей, capacity это далеко не просто какой-то член объекта, который изменяется при непосредственном выделении памяти для контейнера. Верно? Эту часть Вашего вопроса я не понял. Capacity можно хранить как член вектора, а можно вместо это хранить указатель на конец области памяти. С точки зрения внешнего наблюдателя разницы нет, а стандарт не специфицирует, как это должно быть реализовано.
Про адаптеры и псевдоконтейнеры не хватает примеров с кодом. Добавьте, пожалуйста, в будущем, если возможно
Уважаемый Computer Science Center, а где можно прочитать условие задания про COW, которое обсуждается на 1:19:00
Там обсуждается домашнее задание для студентов: нужно реализовать аналог std::string, который реализует подход copy-on-write (копирование при записи), при котором строки при копировании не создают новый буффер, а начинают совместно владеть им (это более дешёвая операция). И реальное копирование происходит только в тот момент, когда (и если) одну из этих строк пытаются изменить.
Alexander Smal, спасибо большое
лекция хорошая, но вот то что вы пишите мелом на доске, выглядит как то странно да еще и плохо видно. Я думаю проще было бы на компьютере печатать и выводить это все.
Александр, большое спасибо за Ваши лекции!
Можно, пожалуйста, разъяснить последний момент с трюком по уменьшению capacity? Про свап изначального контейнера "v" с временным объектом.
Правильно ли я понимаю, что здесь вся суть сводится именно к обмену УКАЗАТЕЛЕЙ. Т.е. итераторы(начальный и конечный в случае c vector) во временном объекте, после свапа, указывают на область, которая была аллоцирована изначальным объектом "v". Соответственно она и высвобождается. А та область, которая была выделена временным объектом при его инициализации, поддерживается впредь объектом "v". Я прав?
По такой логике вещей, capacity это далеко не просто какой-то член объекта, который изменяется при непосредственном выделении памяти для контейнера. Верно?
P.S. пока писал этот вопрос. любопытство заставило взглянуть "под капот" capacity:
size_type capacity() const _NOEXCEPT
{ // return current length of allocated storage
return (this->_Myend() - this->_Myfirst());
}
Было бы здорово, если на последующих лекциях по этой теме вы сделаете на этом небольшой акцент.
Премного благодарен!!!
+Евгений Ш. Внутри swap-а будет произведён обмен указателей. Итераторы тут ни при чём, они создаются по запросу и после выполнения данной операции они все инвалидируются. В остальном, да, Вы правы - v обменивается областью памяти с временным объектом (который является копией v).
> По такой логике вещей, capacity это далеко не просто какой-то член
объекта, который изменяется при непосредственном выделении памяти для контейнера. Верно?
Эту часть Вашего вопроса я не понял. Capacity можно хранить как член вектора, а можно вместо это хранить указатель на конец области памяти. С точки зрения внешнего наблюдателя разницы нет, а стандарт не специфицирует, как это должно быть реализовано.
Уважаемый Computer Science Center , это видео доступно только по ссылке. Исправьте, пожалуйста. Откройте его для всех.
И правда. Поправили.
Спасибо!
Разве слово "дек" не мужского рода?)
double-ended-queue, т.е. двухсторонняя очередь.
Не стрелочка, а не точка. Малолетний тим лид, наверное))