STL с нуля | C++

Поделиться
HTML-код
  • Опубликовано: 30 сен 2024

Комментарии • 105

  • @DariaEmacs
    @DariaEmacs  3 года назад +5

    1:24 - заполнение контейнеров.
    2:44 - вопрос о передаче параметра в функцию (копия, ссылка, универсальная ссылка).
    4:54 - как посмотреть, что генерит компилятор из универсальной ссылки.
    8:53 - про рандом.
    10:36 - list vs vector.
    14:38 - как удалить элемент из std::vector.
    16:19 - решение задачи про исчезнувший элемент.
    18:11 - обсуждаем сложность алгоритмов.
    21:37 - чем хороша STL.

  • @remoshka777
    @remoshka777 Год назад +6

    Дарья, не пропадай. Мы все за тобой наблюдаем :). Давай продолжай серию роликов про Йемакс!

  • @NoNo-fl6oq
    @NoNo-fl6oq Год назад +2

    Скучаем по видео! Может о линуксе что-то посоветуете? И по ассемблеру понятным языком

  • @georgebezov
    @georgebezov Год назад +1

    Случайно набрел на канал, но, как вижу, он малость заброшен. Последнее видео 2 года назад. Очень жаль)) Наверное, Дарья вышла замуж))

  • @Nno_O
    @Nno_O Год назад +2

    Нет больше свежих видосов. Наверное на Java перешла... =(

  • @const64
    @const64 3 года назад +7

    супер! почаще делай видосы плиз

  • @МитяДьяконов
    @МитяДьяконов 3 года назад +2

    Дарья ты там живая? семь же месяцев прошло.

    • @DariaEmacs
      @DariaEmacs  2 года назад

      Жива пока)), распознаванием на с++ занимаюсь, интересно

    • @МитяДьяконов
      @МитяДьяконов 2 года назад +1

      @@DariaEmacs Я чесно очень рад это слышать! Вы очень мне нравитесь. Вообще классная вы!

  • @ИванАверьянов-ч9л
    @ИванАверьянов-ч9л 3 года назад +6

    Очень интересные видео, ждем продолжения

    • @DariaEmacs
      @DariaEmacs  3 года назад +2

      Спасибо, Иван)!

  • @olehmelnychuk1224
    @olehmelnychuk1224 Год назад +1

    Ностальгически посетил канал) Программиста из меня не вышло, но помню насколько наглядно подавалась тут информация, и как это было замечательно познавать новое:) Спасибо автору!

  • @20repsquater
    @20repsquater 3 года назад +3

    Можно мне такого репетитора?)

  • @aleyer_s
    @aleyer_s 3 года назад +2

    Спасибо за упоминание об этой книге. Прочитал, понравилось.

  • @DariaEmacs
    @DariaEmacs  3 года назад +2

    Опять звук пропал с середины ((, извините, сейчас буду править

  • @МаксТарасов-г4ь
    @МаксТарасов-г4ь 9 месяцев назад

    я не понимаю немного формат видео,обучение или ознакомление? Если обучение то это треш)

  • @sympathies1769
    @sympathies1769 3 года назад +1

    можете, пожалуйста, сделать туториал по пользованию Emacs? особенно о том, как правильно компилировать и где увидеть результат выполнения программы? в интернете очень мало полезной информации на русском языке по этим темам

  • @niklkelbon3662
    @niklkelbon3662 3 года назад +2

    Как по мне первая задача так себе решается средствами STL, гораздо логичнее создать массив bool на 100 элементов, потом 1 раз пройти по данным и заполнить bool* i[number] = 1, а потом ещё 1 раз пройти по уже массиву бул, то есть колоссально эффективнее, чем просто сортировать массив.

    • @altkun_
      @altkun_ 3 года назад +1

      еще можно посчитать xor для чисел от 1 до 100 и сохранить это число в переменной, а потом просто пробежаться по элементам вектора и делать xor

    • @DariaEmacs
      @DariaEmacs  3 года назад

      Почему бы и нет. Все способы за линейное время хороши. )).

    • @niklkelbon3662
      @niklkelbon3662 3 года назад

      @@Nandarion а если задача не настолько ограничена и возможно например, что 2 числа отсутствуют, что делать будем с xor?

  • @niklkelbon3662
    @niklkelbon3662 3 года назад +2

    Чтобы перемешать лист нужно отсортировать его используя в качестве лямбды рандомную выдачу результата сравнения

    • @DariaEmacs
      @DariaEmacs  3 года назад

      Спасибо, очень интересно. Обязательно попробую)!

    • @dat_21
      @dat_21 3 года назад

      Нельзя так делать.

  • @alexanders5465
    @alexanders5465 3 года назад +1

    Добрый день. У меня вопрос по поводу валидности имен. Я обычно использую для сокращения кода int64_t. Вообще нужно писать с std:: , но работает и так (что странно) и плюс это выражение работает и без . Как это понимать? Видимо это авто импорт (... проверил с флагом -E и в выходном файле нет никаких включенных заголовочных файлов)... или неявная декларация имен по типу стандартных операторов. Это работает на основных компиляторах. Вопрос: стоит ли следовать стандарту и включать cstdint, использовать std::int64_t, или пользоваться компиляторным сахаром и не беспокоиться?

    • @DariaEmacs
      @DariaEmacs  3 года назад +1

      Добрый день,
      я могу ошибаться, но при поиске, где же определяется 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.

  • @altkun_
    @altkun_ 3 года назад +2

    простое решение для первой задачи
    int res = 100;
    for (auto x : vals) {
    res ^= x;
    }

    • @DariaEmacs
      @DariaEmacs  3 года назад +1

      Неожиданный вариант). Большое спасибо!

    • @sahedron
      @sahedron 3 года назад +1

      Это работает только для четного количества элементов. А так довольно красивое решение :)

    • @frobeniusfg
      @frobeniusfg 3 года назад

      @@sahedron на самом деле, количество должно быть кратно 4. Тогда xor чисел от 1 до n равняется n. Впрочем легко написать формулу для быстрого вычисления 1 xor 2 xor ... xor n для любого n. Ответ: n, 1, n+1, 0 при остатке от деления n на 4 равном 0, 1, 2, 3 соответственно.

  • @_just_a_man
    @_just_a_man 3 года назад +1

    Спасибо за видео! Не совсем понял что делает cppinsights.. он преобразует исходный код в то, как это работает на более низком уровне в плане реализации используемых библиотек?

    • @DariaEmacs
      @DariaEmacs  3 года назад +3

      Я его использую, чтобы посмотреть, какие шаблоны сгенерил компилятор. То есть он показывает все скрытые от нас трансформации, которые производит компилятор, в clang есть такая возможность clang++ -Xclang -ast-print -fsyntax-only file.cpp. А автор сайта сделал браузерную версию.

  • @asylbekthen1388
    @asylbekthen1388 3 года назад +1

    классно

  • @НиколайЕвтушенко-д1ю

    В ВК Вы есть?

  • @channelname1938
    @channelname1938 2 года назад

    Слушай, а раз ты теперь любишь компьютерное зрение, ты читала книгу "цифровая обработка изображений"?

  • @ЛидияИльина-г1я
    @ЛидияИльина-г1я 3 года назад

    Здравствуйте, можно попробовать пройти собеседование на должность Junior C++, если вам ещё нужны сотрудники ?

  • @АлёнаАлёновна-н2е

    Приветик Дарья! Скажи пожалуйста, как назывался предмет, на котором вы доказывали правильность программ?

  • @channelname1938
    @channelname1938 2 года назад

    Дарья, пляши! Вышло новое издание "алгоритмов. построение и анализ" (на англ. языке). Правда мне обложка у третьего издания больше понравилась🤗🤗🤗

  • @pavelk.6807
    @pavelk.6807 Год назад

    если входной массив (с пропущенным элементом) "сконкатенировать" с полным массивом, то петля с поэлементным xor-ом вернет пропущенное число во входном массиве

  • @Pror0ckCoding
    @Pror0ckCoding 2 года назад

    Очень круто все! Спасибо!) Правда, не очень понятно, зачем удалять рандомный элемент из уже перемешанных элементов, если можно удалить просто последний элемент из вектора и эффект будет тот же, только чуть быстрее

  • @NoNo-fl6oq
    @NoNo-fl6oq 2 года назад

    а как понимать, какая сложность у алгоритма? О(n) или еще что-то? как это учить ? это надо на собеседованиях?

  • @jw200
    @jw200 3 года назад +1

    Ваш заработок с ютуба только?
    Или чем Вы занимаетесь если не секрет?

    • @DariaEmacs
      @DariaEmacs  3 года назад +5

      С ютуба у меня ничего нет)), Вы где-нибудь видели в моих роликах рекламу? У меня не включена монетизация. Я работаю программистом C++.

    • @singletonpersonally4341
      @singletonpersonally4341 3 года назад +1

      ​@@DariaEmacs Почему-то у вас не так много подпищиков, хотя ваш канал один из самых лучших на ютубе. Спасибо за труд)) Всегда очень интересно и для меня, как студента 1-ого курса, познавательно)

    • @DariaEmacs
      @DariaEmacs  3 года назад

      Спасибо )!

  • @kirillshvedov750
    @kirillshvedov750 3 года назад

    там вопрос на 19:21 про дублирующий элемент в массиве: нельзя просто через контейнер std:set , где все элементы уникальные. Кокретно этим контейнером особо не пользовался , но может быть можно как-то этими элементами из массива инциализтровать std::set , ну и соответсвенно по одному удалять из массива элементы ,которые записались в сет. В итоге получим лишнее число(одно в массиве) если так возможно с сетами, конечно.

    • @DariaEmacs
      @DariaEmacs  3 года назад +1

      Конечно, можно, Кирилл. Проблема в том, что добавление элемента в std set - это логарифм от n. А всего получится в худшем случае построение сета - nlog(n). По сути, такая же сложность, как, если бы мы отсортировали этот вектор.

  • @reosfire
    @reosfire 3 года назад

    я понимаю, что вопрос не по теме видео и вообще канала, но, как выделаете такие красивые камушки? где этому найчиться?)

    • @DariaEmacs
      @DariaEmacs  3 года назад +1

      Просто рисую, как вижу, как душа просит. Но знаю, что есть школа Беловодовой Светланы, у неё потрясающие работы. Для меня - это хобби, а она - профессионал.

  • @nikitafamily5341
    @nikitafamily5341 Год назад

    Дарья здравствуйте!
    А подскажите как читать такое?
    const int* p = …
    Int const* p = …
    Int* const p = …
    Const int* const p = …
    int* p const = …
    В чем различие и как их читать?

    • @DariaEmacs
      @DariaEmacs  Год назад +1

      Читаем справа налево:
      const int* p = int const* p = р - это указатель на константный целый тип
      Int* const p = p - это константный указатель на целый тип
      Const int* const p = р - это константный указатель на константный целый тип
      int* p const - такого нет.

    • @nikitafamily5341
      @nikitafamily5341 Год назад

      @@DariaEmacs спасибо!!

  • @reosfire
    @reosfire 3 года назад

    На канале нет ни одного видео про хеши. да и про поиск подстрок в строках. ну это я так...)

    • @DariaEmacs
      @DariaEmacs  3 года назад +1

      Спасибо)). Увлеклась OpenCV и машинным зрением, может сделать по этой теме..

  • @СветланаБ-у6д
    @СветланаБ-у6д 3 года назад

    Привет) спасибо за видосики. Начала читать вводный курс по алгортмам Кормена. Как раз пытаюсь разобраться с массивами. Кажется, что у тебя много годноты)

    • @DariaEmacs
      @DariaEmacs  3 года назад

      Спасибо, Светлана! )) Кормен - отличная книга.

  • @bondstream
    @bondstream 3 года назад

    Интересно познавательно подписался

  • @ligecss1928
    @ligecss1928 3 года назад

    По-видимому, автор уставший, судя по речи. Но видео достаточно интересное. Я хоть и python начинающий новичок, только big-o изучил в основах, но очень интересно слушать. Много нового узнаю, спасибо Вам, Дарья. Кстати, подскажите пожалуйста, что думаете о книге "Алгоритмы" Рода Стивенса, конечно, если знаете ее?

    • @DariaEmacs
      @DariaEmacs  3 года назад +1

      Судя по содержанию, отличная книга, всё, что нужно для программиста общего профиля).

    • @ligecss1928
      @ligecss1928 3 года назад

      @@DariaEmacs благодарю Вас)

  • @sergeygrechishnikov282
    @sergeygrechishnikov282 3 года назад

    Спасибо Дарья, хороший формат изучения STL и немного boost)) Но у меня после прочтения книги: stolyarov.info/books/programming_intro/vol4, возникло много вопросов по новым стандартам(хотя я ими давно уже пользуюсь) и применению STL. Андрей Викторович назвал стандартизаторов языка С++ "группой международных террористов и призвал не подступаться к STL, без полного понимания, что происходит внутри, например шаблонных классов))

    • @DariaEmacs
      @DariaEmacs  3 года назад +2

      Да, всё правильно, лучше туда не лезть)) без подготовки, но кто соблюдает эти правила? ("Сначала прочитай инструкцию, а только потом включай насос" - "Да я и так знаю, как он работает!" - а потом "шмяк-шмяк" и, оказалось, что это был не насос, а строительный миксер)....

    • @sergeygrechishnikov282
      @sergeygrechishnikov282 3 года назад

      @@DariaEmacs ))точно

  • @Дмитрий-ц7д5ц
    @Дмитрий-ц7д5ц 2 года назад

    Больше не будет видео?

  • @ДмитрийСтрекалов-т7в

    это что собеседование ?

    • @DariaEmacs
      @DariaEmacs  3 года назад

      А что, похоже)?

  • @НиколайЛутков-м3ж
    @НиколайЛутков-м3ж 3 года назад

    спасибо вам Дарья за видео

    • @DariaEmacs
      @DariaEmacs  3 года назад

      Спасибо, Николай!

  • @asylbekthen1388
    @asylbekthen1388 3 года назад

    путаюсь с l value и r value, дайте пож та ссылку на видео про это

    • @DariaEmacs
      @DariaEmacs  3 года назад

      Это было не видео, это в телеграм-чате обсуждали.

    • @asylbekthen1388
      @asylbekthen1388 3 года назад

      спасибо большое, поищу в чате) Вы такая классная! И внешне очень красивая!

  • @xetmu5883
    @xetmu5883 3 года назад

    wtools.io/paste-code/b3M0 подскажите пожалуйста, почему он не может удалить объект класса

    • @DariaEmacs
      @DariaEmacs  3 года назад

      А зачем Вы вот так делаете? Здесь объект сам удалится, когда выйдет из области видимости. Не нужно делать delete.
      matrix MAT(L,C);
      delete &MAT;

    • @DariaEmacs
      @DariaEmacs  3 года назад

      Просто закомментируйте эту строку: delete &MAT;

    • @xetmu5883
      @xetmu5883 3 года назад

      @@DariaEmacs Хорошо, спасибо

    • @DariaEmacs
      @DariaEmacs  3 года назад

      Выделение памяти в стеке.

  • @ОлександрСвириденко-е4г

    Скажите,пожалуйста,вы работаете на linux? Есть ли гайд для того, чтобы компилировать проекты с помощью обычного редактора и запускать проекты, без специализированных интегрированных сред разработки(visual studio, code/blocks)? Может видео есть у вас))

    • @DariaEmacs
      @DariaEmacs  3 года назад

      В емакс нажимаете Alt и одновременно x, а затем пишите compile и нажимаете enter. Там появится слово make, его можно стереть и написать любую команду для компиляции g++ test.cpp -o test && ./test

    • @ОлександрСвириденко-е4г
      @ОлександрСвириденко-е4г 3 года назад

      @@DariaEmacs Волшебно, вы супер))
      Очень благодарен))

    • @aleyer_s
      @aleyer_s 3 года назад

      А можно полюбопытствовать, чем IDE не подошли?

    • @ОлександрСвириденко-е4г
      @ОлександрСвириденко-е4г 3 года назад

      @@aleyer_s Первое это то,что как начинающий пользователь Линукс, хотелось узнать как все таки компилировать прямо из под линукса. Второе:
      "Visual Studio"-работает на Linux в полурежиме, без компиляции.
      "QT Creator"- нужно танцы з бубном как говорят, чтобы его настроить. Я так и не настроил.
      "Eclipse"-работает, здесь бубен нужен по меньше.
      "Code Blocks"-идеальный вариант, работает моментально, установка прямо из "Ubuntu software".

    • @aleyer_s
      @aleyer_s 3 года назад

      @@ОлександрСвириденко-е4г спасибо за удовлетворение любопытства)
      Я ставил Qt Creator как часть Qt SDK и после установки он просто работал) Включая, например, отладку. Возможно, если устанавливать из пакетного менеджера, это не так.
      Удачи!

  • @xetmu5883
    @xetmu5883 3 года назад

    Ну можно было сложить все элементы массивы и все элементы от -1 до 100, отнять от второго результата первое и вот нужное число

    • @DariaEmacs
      @DariaEmacs  3 года назад

      Ну, так и сделали), только почему от -1?

    • @xetmu5883
      @xetmu5883 3 года назад

      @@DariaEmacsзначит увидел минус, которого нет(

    • @xetmu5883
      @xetmu5883 3 года назад

      @@DariaEmacs подскажите пожалуйста, как вы относитесь к учебникам Павловской?

    • @DariaEmacs
      @DariaEmacs  3 года назад

      @@xetmu5883 , к сожалению, я с ними незнакома. Расскажите, пожалуйста, а Вам как они? Может, почитать?

    • @xetmu5883
      @xetmu5883 3 года назад

      @@DariaEmacs , мне посоветовали её ребята с магистратуры и аспирантуры в качестве самого первого учебника по программированию вообще; у неё есть книги по С# и С/С++; я имел ввиду книгу 2015 года: "Процедурное и объектно-ориентированное программирование. Учебник. "В ней рассказывается самое основное:
      1)Базовые средства языка С++
      2)Модульное программирование
      3)Введение в организацию данных
      4)Классы
      5)Наследование
      6)Шаблоны классов
      7)Обработка исключительных ситуаций
      8)Преобразование типов
      9)Потоковые классы
      10)Строки и регулярные выражения
      11)Контейнерные классы
      12)Итераторы и Функторы
      13)Алгоритмы
      14)Средства для численных расчетов
      15)Другие средства стандартной библиотеки
      Мне вполне нравится данная книга, всё достаточно понятно разъясняется, боюсь, что Вам они будут не интересны, так как там базовая информация