1:24 - заполнение контейнеров. 2:44 - вопрос о передаче параметра в функцию (копия, ссылка, универсальная ссылка). 4:54 - как посмотреть, что генерит компилятор из универсальной ссылки. 8:53 - про рандом. 10:36 - list vs vector. 14:38 - как удалить элемент из std::vector. 16:19 - решение задачи про исчезнувший элемент. 18:11 - обсуждаем сложность алгоритмов. 21:37 - чем хороша STL.
Ностальгически посетил канал) Программиста из меня не вышло, но помню насколько наглядно подавалась тут информация, и как это было замечательно познавать новое:) Спасибо автору!
Привет) спасибо за видосики. Начала читать вводный курс по алгортмам Кормена. Как раз пытаюсь разобраться с массивами. Кажется, что у тебя много годноты)
можете, пожалуйста, сделать туториал по пользованию Emacs? особенно о том, как правильно компилировать и где увидеть результат выполнения программы? в интернете очень мало полезной информации на русском языке по этим темам
Добрый день. У меня вопрос по поводу валидности имен. Я обычно использую для сокращения кода int64_t. Вообще нужно писать с std:: , но работает и так (что странно) и плюс это выражение работает и без . Как это понимать? Видимо это авто импорт (... проверил с флагом -E и в выходном файле нет никаких включенных заголовочных файлов)... или неявная декларация имен по типу стандартных операторов. Это работает на основных компиляторах. Вопрос: стоит ли следовать стандарту и включать cstdint, использовать std::int64_t, или пользоваться компиляторным сахаром и не беспокоиться?
Добрый день, я могу ошибаться, но при поиске, где же определяется int64_t, мне выдало, что это обычный typedef, который определён в стандартной библиотеке gcc: $ grep -rn "int64_t;" /lib/gcc /lib/gcc/x86_64-linux-gnu/8/include/stdint-gcc.h:43:typedef __INT64_TYPE__ int64_t; /lib/gcc/x86_64-linux-gnu/8/include/stdint-gcc.h:55:typedef __UINT64_TYPE__ uint64_t; А потом можно посмотреть, какие макросы включаются по умолчанию в пустую программу: $ g++ -dM -E -x c++ /dev/null | grep INT64 #define __INT64_C(c) c ## L #define __UINT64_C(c) c ## UL #define __UINT64_MAX__ 0xffffffffffffffffUL #define __INT64_MAX__ 0x7fffffffffffffffL #define __INT64_TYPE__ long int #define __UINT64_TYPE__ long unsigned int Как видно int64_t превращается в long int. Наверное, поэтому и не нужно добавлять пространство имён std. И тут, действительно, возникает вопрос, а нужно ли утруждать себя и писать std:: перед int64_t? На мой субъективный взгляд, нужно, так как это дает уверенность, что этот тип из STL, а не какой-то придуманный переопределенный. Мне бы хотелось это видеть, когда я читаю код)). P.S. std::is_same() даёт true.
там вопрос на 19:21 про дублирующий элемент в массиве: нельзя просто через контейнер std:set , где все элементы уникальные. Кокретно этим контейнером особо не пользовался , но может быть можно как-то этими элементами из массива инциализтровать std::set , ну и соответсвенно по одному удалять из массива элементы ,которые записались в сет. В итоге получим лишнее число(одно в массиве) если так возможно с сетами, конечно.
Конечно, можно, Кирилл. Проблема в том, что добавление элемента в std set - это логарифм от n. А всего получится в худшем случае построение сета - nlog(n). По сути, такая же сложность, как, если бы мы отсортировали этот вектор.
если входной массив (с пропущенным элементом) "сконкатенировать" с полным массивом, то петля с поэлементным xor-ом вернет пропущенное число во входном массиве
Дарья здравствуйте! А подскажите как читать такое? const int* p = … Int const* p = … Int* const p = … Const int* const p = … int* p const = … В чем различие и как их читать?
Читаем справа налево: const int* p = int const* p = р - это указатель на константный целый тип Int* const p = p - это константный указатель на целый тип Const int* const p = р - это константный указатель на константный целый тип int* p const - такого нет.
Спасибо за видео! Не совсем понял что делает cppinsights.. он преобразует исходный код в то, как это работает на более низком уровне в плане реализации используемых библиотек?
Я его использую, чтобы посмотреть, какие шаблоны сгенерил компилятор. То есть он показывает все скрытые от нас трансформации, которые производит компилятор, в clang есть такая возможность clang++ -Xclang -ast-print -fsyntax-only file.cpp. А автор сайта сделал браузерную версию.
Как по мне первая задача так себе решается средствами STL, гораздо логичнее создать массив bool на 100 элементов, потом 1 раз пройти по данным и заполнить bool* i[number] = 1, а потом ещё 1 раз пройти по уже массиву бул, то есть колоссально эффективнее, чем просто сортировать массив.
Скажите,пожалуйста,вы работаете на linux? Есть ли гайд для того, чтобы компилировать проекты с помощью обычного редактора и запускать проекты, без специализированных интегрированных сред разработки(visual studio, code/blocks)? Может видео есть у вас))
В емакс нажимаете Alt и одновременно x, а затем пишите compile и нажимаете enter. Там появится слово make, его можно стереть и написать любую команду для компиляции g++ test.cpp -o test && ./test
@@aleyer_s Первое это то,что как начинающий пользователь Линукс, хотелось узнать как все таки компилировать прямо из под линукса. Второе: "Visual Studio"-работает на Linux в полурежиме, без компиляции. "QT Creator"- нужно танцы з бубном как говорят, чтобы его настроить. Я так и не настроил. "Eclipse"-работает, здесь бубен нужен по меньше. "Code Blocks"-идеальный вариант, работает моментально, установка прямо из "Ubuntu software".
@@ОлександрСвириденко-е4г спасибо за удовлетворение любопытства) Я ставил Qt Creator как часть Qt SDK и после установки он просто работал) Включая, например, отладку. Возможно, если устанавливать из пакетного менеджера, это не так. Удачи!
Очень круто все! Спасибо!) Правда, не очень понятно, зачем удалять рандомный элемент из уже перемешанных элементов, если можно удалить просто последний элемент из вектора и эффект будет тот же, только чуть быстрее
Просто рисую, как вижу, как душа просит. Но знаю, что есть школа Беловодовой Светланы, у неё потрясающие работы. Для меня - это хобби, а она - профессионал.
@@DariaEmacs Почему-то у вас не так много подпищиков, хотя ваш канал один из самых лучших на ютубе. Спасибо за труд)) Всегда очень интересно и для меня, как студента 1-ого курса, познавательно)
По-видимому, автор уставший, судя по речи. Но видео достаточно интересное. Я хоть и python начинающий новичок, только big-o изучил в основах, но очень интересно слушать. Много нового узнаю, спасибо Вам, Дарья. Кстати, подскажите пожалуйста, что думаете о книге "Алгоритмы" Рода Стивенса, конечно, если знаете ее?
Спасибо Дарья, хороший формат изучения STL и немного boost)) Но у меня после прочтения книги: stolyarov.info/books/programming_intro/vol4, возникло много вопросов по новым стандартам(хотя я ими давно уже пользуюсь) и применению STL. Андрей Викторович назвал стандартизаторов языка С++ "группой международных террористов и призвал не подступаться к STL, без полного понимания, что происходит внутри, например шаблонных классов))
Да, всё правильно, лучше туда не лезть)) без подготовки, но кто соблюдает эти правила? ("Сначала прочитай инструкцию, а только потом включай насос" - "Да я и так знаю, как он работает!" - а потом "шмяк-шмяк" и, оказалось, что это был не насос, а строительный миксер)....
@@sahedron на самом деле, количество должно быть кратно 4. Тогда xor чисел от 1 до n равняется n. Впрочем легко написать формулу для быстрого вычисления 1 xor 2 xor ... xor n для любого n. Ответ: n, 1, n+1, 0 при остатке от деления n на 4 равном 0, 1, 2, 3 соответственно.
@@DariaEmacs , мне посоветовали её ребята с магистратуры и аспирантуры в качестве самого первого учебника по программированию вообще; у неё есть книги по С# и С/С++; я имел ввиду книгу 2015 года: "Процедурное и объектно-ориентированное программирование. Учебник. "В ней рассказывается самое основное: 1)Базовые средства языка С++ 2)Модульное программирование 3)Введение в организацию данных 4)Классы 5)Наследование 6)Шаблоны классов 7)Обработка исключительных ситуаций 8)Преобразование типов 9)Потоковые классы 10)Строки и регулярные выражения 11)Контейнерные классы 12)Итераторы и Функторы 13)Алгоритмы 14)Средства для численных расчетов 15)Другие средства стандартной библиотеки Мне вполне нравится данная книга, всё достаточно понятно разъясняется, боюсь, что Вам они будут не интересны, так как там базовая информация
1:24 - заполнение контейнеров.
2:44 - вопрос о передаче параметра в функцию (копия, ссылка, универсальная ссылка).
4:54 - как посмотреть, что генерит компилятор из универсальной ссылки.
8:53 - про рандом.
10:36 - list vs vector.
14:38 - как удалить элемент из std::vector.
16:19 - решение задачи про исчезнувший элемент.
18:11 - обсуждаем сложность алгоритмов.
21:37 - чем хороша STL.
Дарья, не пропадай. Мы все за тобой наблюдаем :). Давай продолжай серию роликов про Йемакс!
Ностальгически посетил канал) Программиста из меня не вышло, но помню насколько наглядно подавалась тут информация, и как это было замечательно познавать новое:) Спасибо автору!
Спасибо за упоминание об этой книге. Прочитал, понравилось.
Очень интересные видео, ждем продолжения
Спасибо, Иван)!
Скучаем по видео! Может о линуксе что-то посоветуете? И по ассемблеру понятным языком
Опять звук пропал с середины ((, извините, сейчас буду править
Или нет? Есть звук?
@@DariaEmacs в районе 14.30 пропадает
Звук есть
С 2:33 пропадает :(
Случайно набрел на канал, но, как вижу, он малость заброшен. Последнее видео 2 года назад. Очень жаль)) Наверное, Дарья вышла замуж))
супер! почаще делай видосы плиз
Привет) спасибо за видосики. Начала читать вводный курс по алгортмам Кормена. Как раз пытаюсь разобраться с массивами. Кажется, что у тебя много годноты)
Спасибо, Светлана! )) Кормен - отличная книга.
Приветик Дарья! Скажи пожалуйста, как назывался предмет, на котором вы доказывали правильность программ?
можете, пожалуйста, сделать туториал по пользованию Emacs? особенно о том, как правильно компилировать и где увидеть результат выполнения программы? в интернете очень мало полезной информации на русском языке по этим темам
Добрый день. У меня вопрос по поводу валидности имен. Я обычно использую для сокращения кода int64_t. Вообще нужно писать с std:: , но работает и так (что странно) и плюс это выражение работает и без . Как это понимать? Видимо это авто импорт (... проверил с флагом -E и в выходном файле нет никаких включенных заголовочных файлов)... или неявная декларация имен по типу стандартных операторов. Это работает на основных компиляторах. Вопрос: стоит ли следовать стандарту и включать cstdint, использовать std::int64_t, или пользоваться компиляторным сахаром и не беспокоиться?
Добрый день,
я могу ошибаться, но при поиске, где же определяется int64_t, мне выдало, что это обычный typedef, который определён в стандартной библиотеке gcc:
$ grep -rn "int64_t;" /lib/gcc
/lib/gcc/x86_64-linux-gnu/8/include/stdint-gcc.h:43:typedef __INT64_TYPE__ int64_t;
/lib/gcc/x86_64-linux-gnu/8/include/stdint-gcc.h:55:typedef __UINT64_TYPE__ uint64_t;
А потом можно посмотреть, какие макросы включаются по умолчанию в пустую программу:
$ g++ -dM -E -x c++ /dev/null | grep INT64
#define __INT64_C(c) c ## L
#define __UINT64_C(c) c ## UL
#define __UINT64_MAX__ 0xffffffffffffffffUL
#define __INT64_MAX__ 0x7fffffffffffffffL
#define __INT64_TYPE__ long int
#define __UINT64_TYPE__ long unsigned int
Как видно int64_t превращается в long int.
Наверное, поэтому и не нужно добавлять пространство имён std.
И тут, действительно, возникает вопрос, а нужно ли утруждать себя и писать std:: перед int64_t? На мой субъективный взгляд, нужно, так как это дает уверенность, что этот тип из STL, а не какой-то придуманный переопределенный. Мне бы хотелось это видеть, когда я читаю код)).
P.S. std::is_same() даёт true.
Здравствуйте, можно попробовать пройти собеседование на должность Junior C++, если вам ещё нужны сотрудники ?
Дарья ты там живая? семь же месяцев прошло.
Жива пока)), распознаванием на с++ занимаюсь, интересно
@@DariaEmacs Я чесно очень рад это слышать! Вы очень мне нравитесь. Вообще классная вы!
я не понимаю немного формат видео,обучение или ознакомление? Если обучение то это треш)
а как понимать, какая сложность у алгоритма? О(n) или еще что-то? как это учить ? это надо на собеседованиях?
там вопрос на 19:21 про дублирующий элемент в массиве: нельзя просто через контейнер std:set , где все элементы уникальные. Кокретно этим контейнером особо не пользовался , но может быть можно как-то этими элементами из массива инциализтровать std::set , ну и соответсвенно по одному удалять из массива элементы ,которые записались в сет. В итоге получим лишнее число(одно в массиве) если так возможно с сетами, конечно.
Конечно, можно, Кирилл. Проблема в том, что добавление элемента в std set - это логарифм от n. А всего получится в худшем случае построение сета - nlog(n). По сути, такая же сложность, как, если бы мы отсортировали этот вектор.
спасибо вам Дарья за видео
Спасибо, Николай!
если входной массив (с пропущенным элементом) "сконкатенировать" с полным массивом, то петля с поэлементным xor-ом вернет пропущенное число во входном массиве
Дарья, пляши! Вышло новое издание "алгоритмов. построение и анализ" (на англ. языке). Правда мне обложка у третьего издания больше понравилась🤗🤗🤗
Дарья здравствуйте!
А подскажите как читать такое?
const int* p = …
Int const* p = …
Int* const p = …
Const int* const p = …
int* p const = …
В чем различие и как их читать?
Читаем справа налево:
const int* p = int const* p = р - это указатель на константный целый тип
Int* const p = p - это константный указатель на целый тип
Const int* const p = р - это константный указатель на константный целый тип
int* p const - такого нет.
@@DariaEmacs спасибо!!
Чтобы перемешать лист нужно отсортировать его используя в качестве лямбды рандомную выдачу результата сравнения
Спасибо, очень интересно. Обязательно попробую)!
Нельзя так делать.
Спасибо за видео! Не совсем понял что делает cppinsights.. он преобразует исходный код в то, как это работает на более низком уровне в плане реализации используемых библиотек?
Я его использую, чтобы посмотреть, какие шаблоны сгенерил компилятор. То есть он показывает все скрытые от нас трансформации, которые производит компилятор, в clang есть такая возможность clang++ -Xclang -ast-print -fsyntax-only file.cpp. А автор сайта сделал браузерную версию.
Как по мне первая задача так себе решается средствами STL, гораздо логичнее создать массив bool на 100 элементов, потом 1 раз пройти по данным и заполнить bool* i[number] = 1, а потом ещё 1 раз пройти по уже массиву бул, то есть колоссально эффективнее, чем просто сортировать массив.
еще можно посчитать xor для чисел от 1 до 100 и сохранить это число в переменной, а потом просто пробежаться по элементам вектора и делать xor
Почему бы и нет. Все способы за линейное время хороши. )).
@@Nandarion а если задача не настолько ограничена и возможно например, что 2 числа отсутствуют, что делать будем с xor?
В ВК Вы есть?
Скажите,пожалуйста,вы работаете на linux? Есть ли гайд для того, чтобы компилировать проекты с помощью обычного редактора и запускать проекты, без специализированных интегрированных сред разработки(visual studio, code/blocks)? Может видео есть у вас))
В емакс нажимаете Alt и одновременно x, а затем пишите compile и нажимаете enter. Там появится слово make, его можно стереть и написать любую команду для компиляции g++ test.cpp -o test && ./test
@@DariaEmacs Волшебно, вы супер))
Очень благодарен))
А можно полюбопытствовать, чем IDE не подошли?
@@aleyer_s Первое это то,что как начинающий пользователь Линукс, хотелось узнать как все таки компилировать прямо из под линукса. Второе:
"Visual Studio"-работает на Linux в полурежиме, без компиляции.
"QT Creator"- нужно танцы з бубном как говорят, чтобы его настроить. Я так и не настроил.
"Eclipse"-работает, здесь бубен нужен по меньше.
"Code Blocks"-идеальный вариант, работает моментально, установка прямо из "Ubuntu software".
@@ОлександрСвириденко-е4г спасибо за удовлетворение любопытства)
Я ставил Qt Creator как часть Qt SDK и после установки он просто работал) Включая, например, отладку. Возможно, если устанавливать из пакетного менеджера, это не так.
Удачи!
Нет больше свежих видосов. Наверное на Java перешла... =(
😀 нет
Слушай, а раз ты теперь любишь компьютерное зрение, ты читала книгу "цифровая обработка изображений"?
Очень круто все! Спасибо!) Правда, не очень понятно, зачем удалять рандомный элемент из уже перемешанных элементов, если можно удалить просто последний элемент из вектора и эффект будет тот же, только чуть быстрее
я понимаю, что вопрос не по теме видео и вообще канала, но, как выделаете такие красивые камушки? где этому найчиться?)
Просто рисую, как вижу, как душа просит. Но знаю, что есть школа Беловодовой Светланы, у неё потрясающие работы. Для меня - это хобби, а она - профессионал.
Больше не будет видео?
Будет
Ваш заработок с ютуба только?
Или чем Вы занимаетесь если не секрет?
С ютуба у меня ничего нет)), Вы где-нибудь видели в моих роликах рекламу? У меня не включена монетизация. Я работаю программистом C++.
@@DariaEmacs Почему-то у вас не так много подпищиков, хотя ваш канал один из самых лучших на ютубе. Спасибо за труд)) Всегда очень интересно и для меня, как студента 1-ого курса, познавательно)
Спасибо )!
По-видимому, автор уставший, судя по речи. Но видео достаточно интересное. Я хоть и python начинающий новичок, только big-o изучил в основах, но очень интересно слушать. Много нового узнаю, спасибо Вам, Дарья. Кстати, подскажите пожалуйста, что думаете о книге "Алгоритмы" Рода Стивенса, конечно, если знаете ее?
Судя по содержанию, отличная книга, всё, что нужно для программиста общего профиля).
@@DariaEmacs благодарю Вас)
путаюсь с l value и r value, дайте пож та ссылку на видео про это
Это было не видео, это в телеграм-чате обсуждали.
спасибо большое, поищу в чате) Вы такая классная! И внешне очень красивая!
wtools.io/paste-code/b3M0 подскажите пожалуйста, почему он не может удалить объект класса
А зачем Вы вот так делаете? Здесь объект сам удалится, когда выйдет из области видимости. Не нужно делать delete.
matrix MAT(L,C);
delete &MAT;
Просто закомментируйте эту строку: delete &MAT;
@@DariaEmacs Хорошо, спасибо
Выделение памяти в стеке.
Интересно познавательно подписался
Спасибо 😊.
классно
Спасибо Дарья, хороший формат изучения STL и немного boost)) Но у меня после прочтения книги: stolyarov.info/books/programming_intro/vol4, возникло много вопросов по новым стандартам(хотя я ими давно уже пользуюсь) и применению STL. Андрей Викторович назвал стандартизаторов языка С++ "группой международных террористов и призвал не подступаться к STL, без полного понимания, что происходит внутри, например шаблонных классов))
Да, всё правильно, лучше туда не лезть)) без подготовки, но кто соблюдает эти правила? ("Сначала прочитай инструкцию, а только потом включай насос" - "Да я и так знаю, как он работает!" - а потом "шмяк-шмяк" и, оказалось, что это был не насос, а строительный миксер)....
@@DariaEmacs ))точно
это что собеседование ?
А что, похоже)?
Можно мне такого репетитора?)
простое решение для первой задачи
int res = 100;
for (auto x : vals) {
res ^= x;
}
Неожиданный вариант). Большое спасибо!
Это работает только для четного количества элементов. А так довольно красивое решение :)
@@sahedron на самом деле, количество должно быть кратно 4. Тогда xor чисел от 1 до n равняется n. Впрочем легко написать формулу для быстрого вычисления 1 xor 2 xor ... xor n для любого n. Ответ: n, 1, n+1, 0 при остатке от деления n на 4 равном 0, 1, 2, 3 соответственно.
Ну можно было сложить все элементы массивы и все элементы от -1 до 100, отнять от второго результата первое и вот нужное число
Ну, так и сделали), только почему от -1?
@@DariaEmacsзначит увидел минус, которого нет(
@@DariaEmacs подскажите пожалуйста, как вы относитесь к учебникам Павловской?
@@xetmu5883 , к сожалению, я с ними незнакома. Расскажите, пожалуйста, а Вам как они? Может, почитать?
@@DariaEmacs , мне посоветовали её ребята с магистратуры и аспирантуры в качестве самого первого учебника по программированию вообще; у неё есть книги по С# и С/С++; я имел ввиду книгу 2015 года: "Процедурное и объектно-ориентированное программирование. Учебник. "В ней рассказывается самое основное:
1)Базовые средства языка С++
2)Модульное программирование
3)Введение в организацию данных
4)Классы
5)Наследование
6)Шаблоны классов
7)Обработка исключительных ситуаций
8)Преобразование типов
9)Потоковые классы
10)Строки и регулярные выражения
11)Контейнерные классы
12)Итераторы и Функторы
13)Алгоритмы
14)Средства для численных расчетов
15)Другие средства стандартной библиотеки
Мне вполне нравится данная книга, всё достаточно понятно разъясняется, боюсь, что Вам они будут не интересны, так как там базовая информация
На канале нет ни одного видео про хеши. да и про поиск подстрок в строках. ну это я так...)
Спасибо)). Увлеклась OpenCV и машинным зрением, может сделать по этой теме..