STL с нуля | C++

Поділитися
Вставка
  • Опубліковано 22 гру 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

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

  • @olehmelnychuk1224
    @olehmelnychuk1224 Рік тому +1

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

  • @aleyer_s
    @aleyer_s 3 роки тому +2

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

  • @ИванАверьянов-ч9л
    @ИванАверьянов-ч9л 3 роки тому +6

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому +2

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

  • @NoNo-fl6oq
    @NoNo-fl6oq Рік тому +2

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

  • @DariaEmacs
    @DariaEmacs  3 роки тому +2

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

  • @georgebezov
    @georgebezov Рік тому +1

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

  • @const64
    @const64 3 роки тому +7

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

  • @СветланаБ-у6д
    @СветланаБ-у6д 3 роки тому

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому

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

  • @АлёнаАлёновна-н2е
    @АлёнаАлёновна-н2е 2 роки тому

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

  • @sympathies1769
    @sympathies1769 3 роки тому +1

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

  • @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.

  • @ЛидияИльина-г1я
    @ЛидияИльина-г1я 3 роки тому

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

  • @МитяДьяконов
    @МитяДьяконов 3 роки тому +2

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому

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

    • @МитяДьяконов
      @МитяДьяконов 3 роки тому +1

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

  • @МаксТарасов-г4ь

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

  • @NoNo-fl6oq
    @NoNo-fl6oq 2 роки тому

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

  • @kirillshvedov750
    @kirillshvedov750 3 роки тому

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому +1

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

  • @НиколайЛутков-м3ж
    @НиколайЛутков-м3ж 3 роки тому

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому

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

  • @pavelk.6807
    @pavelk.6807 2 роки тому

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

  • @channelname1938
    @channelname1938 2 роки тому

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

  • @nikitafamily5341
    @nikitafamily5341 2 роки тому

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

    • @DariaEmacs
      @DariaEmacs  2 роки тому +1

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

    • @nikitafamily5341
      @nikitafamily5341 2 роки тому

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

  • @niklkelbon3662
    @niklkelbon3662 3 роки тому +2

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому

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

    • @dat_21
      @dat_21 3 роки тому

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

  • @_just_a_man
    @_just_a_man 3 роки тому +1

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому +3

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

  • @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?

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

    В ВК Вы есть?

  • @ОлександрСвириденко-е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 и после установки он просто работал) Включая, например, отладку. Возможно, если устанавливать из пакетного менеджера, это не так.
      Удачи!

  • @Nno_O
    @Nno_O 2 роки тому +2

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

  • @channelname1938
    @channelname1938 2 роки тому

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

  • @Pror0ckCoding
    @Pror0ckCoding 2 роки тому

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

  • @reosfire
    @reosfire 3 роки тому

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому +1

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

  • @Дмитрий-ц7д5ц
    @Дмитрий-ц7д5ц 3 роки тому

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

  • @jw200
    @jw200 3 роки тому +1

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому +5

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

    • @singletonpersonally4341
      @singletonpersonally4341 3 роки тому +1

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому

      Спасибо )!

  • @ligecss1928
    @ligecss1928 3 роки тому

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому +1

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

    • @ligecss1928
      @ligecss1928 3 роки тому

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

  • @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 роки тому

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

  • @bondstream
    @bondstream 3 роки тому

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

  • @asylbekthen1388
    @asylbekthen1388 3 роки тому +1

    классно

  • @sergeygrechishnikov282
    @sergeygrechishnikov282 3 роки тому

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому +2

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

    • @sergeygrechishnikov282
      @sergeygrechishnikov282 3 роки тому

      @@DariaEmacs ))точно

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

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

  • @20repsquater
    @20repsquater 3 роки тому +3

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

  • @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 соответственно.

  • @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)Другие средства стандартной библиотеки
      Мне вполне нравится данная книга, всё достаточно понятно разъясняется, боюсь, что Вам они будут не интересны, так как там базовая информация

  • @reosfire
    @reosfire 3 роки тому

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

    • @DariaEmacs
      @DariaEmacs  3 роки тому +1

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