⚡ ️Разреженные структуры данных
В статье рассмотрены разреженные структуры данных
Разряженные структуры данных (sparse data structures) представляют собой специальные типы данных, предназначенные для эффективного хранения и обработки данных, в которых большинство элементов имеют некоторое стандартное или дефолтное значение, и только небольшое количество элементов отличается от этого значения
Рассматриваемые алгоритмы:
Sparse Array (Sparse Matrix)
Sparse List
Sparse Deque (sparque)
Sparse Set
Sparse Map
Разреженные структуры данных
В статье рассмотрены разреженные структуры данных
Разряженные структуры данных (sparse data structures) представляют собой специальные типы данных, предназначенные для эффективного хранения и обработки данных, в которых большинство элементов имеют некоторое стандартное или дефолтное значение, и только небольшое количество элементов отличается от этого значения
Рассматриваемые алгоритмы:
Sparse Array (Sparse Matrix)
Sparse List
Sparse Deque (sparque)
Sparse Set
Sparse Map
Разреженные структуры данных
Приведение типов в C++
1. static_cast
В общем тот же reinterpret_cast, только делает проверку во время компиляции на совместимость. Проверяет можем ли мы сделать downcasting типа, привести тип родителя к типу потомка. Когда заранее известно, что может быть только один тип потомка
2. dynamic_cast
Динамическое преобразование типов, когда информация о типе появляется только во время исполнения программы
3. reinterpret_cast
Сообщает, что в данном участке памяти лежат те или иные типы данных и он этого никак не проверяет. В данном случае программист сам решает
4. const_cast
Снимает const квалификатор. Если понадобился const_cast, то действительно пошло что-то не так и пытаемся снять константность
5. C-style cast
Замаскированное применение const_cast, static_cast, reinterpret_cast и их комбинаций. Применяются в следующем порядке
• const_cast
• static_cast
• static_cast + const_cast
• reinterpret_cast
• reinterpret_cast + const_cast
1. static_cast
В общем тот же reinterpret_cast, только делает проверку во время компиляции на совместимость. Проверяет можем ли мы сделать downcasting типа, привести тип родителя к типу потомка. Когда заранее известно, что может быть только один тип потомка
2. dynamic_cast
Динамическое преобразование типов, когда информация о типе появляется только во время исполнения программы
3. reinterpret_cast
Сообщает, что в данном участке памяти лежат те или иные типы данных и он этого никак не проверяет. В данном случае программист сам решает
4. const_cast
Снимает const квалификатор. Если понадобился const_cast, то действительно пошло что-то не так и пытаемся снять константность
5. C-style cast
Замаскированное применение const_cast, static_cast, reinterpret_cast и их комбинаций. Применяются в следующем порядке
• const_cast
• static_cast
• static_cast + const_cast
• reinterpret_cast
• reinterpret_cast + const_cast
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
🔍 Что такое std::thread?
std::thread предоставляет собой интерфейс для взаимодействия с системными потоками
💡Что можно запустить?
• Любой функтор можно превратить в поток
💡Что можно передать при запуске потока?
• Можно передать любое количество параметров, но стоит учитывать, что все они будут копироваться
• Чтобы передать ссылку, её стоит обернуть в std::ref или std::cref
💡Что можно сделать с потоком?
• После создания потока мы можем с ним делать две вещи: вызвать join и ждать завершение потока или вызвать detach, тогда поток просто будет работать (пока сам не завершится)
💡Начиная с C++20 появился std::jthread
• Это тоже самое, но в деструкторе будет вызываться join
std::thread предоставляет собой интерфейс для взаимодействия с системными потоками
💡Что можно запустить?
• Любой функтор можно превратить в поток
💡Что можно передать при запуске потока?
• Можно передать любое количество параметров, но стоит учитывать, что все они будут копироваться
• Чтобы передать ссылку, её стоит обернуть в std::ref или std::cref
💡Что можно сделать с потоком?
• После создания потока мы можем с ним делать две вещи: вызвать join и ждать завершение потока или вызвать detach, тогда поток просто будет работать (пока сам не завершится)
💡Начиная с C++20 появился std::jthread
• Это тоже самое, но в деструкторе будет вызываться join
🤔 Что такое structural bindings?
• Данная фитча появилась в C++17
• Это механизм, который позволяет нам декомпозировать структуры данных, такие как tuple, pair, и даже свои пользовательские структуры, на более простые именованные переменные
• Это делает код более читаемым, компактным и легко поддерживаемым
🌐 Ссылки
• Восемь возможностей C++17, которые должен применять каждый разработчик
• Structured binding declaration
• Structured binding in C++ https://habr.com/ru/articles/343622/
• Данная фитча появилась в C++17
• Это механизм, который позволяет нам декомпозировать структуры данных, такие как tuple, pair, и даже свои пользовательские структуры, на более простые именованные переменные
• Это делает код более читаемым, компактным и легко поддерживаемым
🌐 Ссылки
• Восемь возможностей C++17, которые должен применять каждый разработчик
• Structured binding declaration
• Structured binding in C++ https://habr.com/ru/articles/343622/
Примеры трюков на C++
Список современных приемов C++, часто используемых на собеседованиях по программированию и соревновательном программировании
modern-cpp-tricks
Список современных приемов C++, часто используемых на собеседованиях по программированию и соревновательном программировании
modern-cpp-tricks
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
🌟 Что такое std::optional?
Это класс, появился начиная с C++17, который даёт удобный способ работы с «возможно отсутствующим» значением
🌐 Ссылки
• std::optional
• std::optional in C++
• Рефакторинг с использованием C++17 std::optional
• Использование std::optional в С++17
Это класс, появился начиная с C++17, который даёт удобный способ работы с «возможно отсутствующим» значением
🌐 Ссылки
• std::optional
• std::optional in C++
• Рефакторинг с использованием C++17 std::optional
• Использование std::optional в С++17
🌟 std::expected (С++23)
std::expected — это механизм, который появился в библиотеке C++23 и предназначен для работы с функциями, которые могут завершиться не только успешно, но и с ошибкой. Он предоставляет альтернативный подход к обработке ошибок, который отличается от использования исключений или статусных кодов
📘 Ссылки
• На грани между exceptions и std::expected
• Using std::expected from C++23
• std::expected
std::expected — это механизм, который появился в библиотеке C++23 и предназначен для работы с функциями, которые могут завершиться не только успешно, но и с ошибкой. Он предоставляет альтернативный подход к обработке ошибок, который отличается от использования исключений или статусных кодов
📘 Ссылки
• На грани между exceptions и std::expected
• Using std::expected from C++23
• std::expected
Статьи за неделю
• Создаем свою STL-совместимую реализацию std::allocator с лучшей производительностью
• Zoom в Qt виджете
• Какой тип ordering должен возвращать мой operator<=> в C++?
• Разреженные структуры данных
• Qt Creator* ищет ошибки в Qt Creator
• Настройка C++ проекта c OpenMP. Обертывание С++ для Python с помощью pybind11 и CMake
• Многообразие функциональных обёрток
• Создаем свою STL-совместимую реализацию std::allocator с лучшей производительностью
• Zoom в Qt виджете
• Какой тип ordering должен возвращать мой operator<=> в C++?
• Разреженные структуры данных
• Qt Creator* ищет ошибки в Qt Creator
• Настройка C++ проекта c OpenMP. Обертывание С++ для Python с помощью pybind11 и CMake
• Многообразие функциональных обёрток
Ответьте на 3 вопроса, чтобы получить вводные занятия к курсу «Алгоритмы и структуры данных»
🔥Получите вводные занятия, ответив на 3 вопроса – https://proglib.io/w/cfe3ce33
На вводной части вас ждут:
▪️ Лекция «Производительность алгоритмов» от руководителя разработки Яндекс.Самокатов
▪️ Лекция «Итеративные сортировки и линейные сортировки» от аспирант департамента искусственного интеллекта ВШЭ
▪️ Практические задания после лекций
▪️ Ссылки на дополнительные материалы для самостоятельного изучения
⚡️ Переходите и начинайте учиться уже сегодня – https://proglib.io/w/cfe3ce33
🔥Получите вводные занятия, ответив на 3 вопроса – https://proglib.io/w/cfe3ce33
На вводной части вас ждут:
▪️ Лекция «Производительность алгоритмов» от руководителя разработки Яндекс.Самокатов
▪️ Лекция «Итеративные сортировки и линейные сортировки» от аспирант департамента искусственного интеллекта ВШЭ
▪️ Практические задания после лекций
▪️ Ссылки на дополнительные материалы для самостоятельного изучения
Please open Telegram to view this post
VIEW IN TELEGRAM
Проблема «Most vexing parse»
Most vexing parse — это ситуация в языке программирования C++, когда компилятор интерпретирует объявление функции вместо объявления объекта, когда это может быть неочевидным для программиста
Проблема возникает из-за того, что определение функции может быть легко спутано с объявлением объекта, который использует конструктор с пустыми скобками
Чтобы избежать проблемы most vexing parse, можно использовать универсальную инициализацию (uniform initialization) с помощью фигурных скобок {}
Most vexing parse — это ситуация в языке программирования C++, когда компилятор интерпретирует объявление функции вместо объявления объекта, когда это может быть неочевидным для программиста
Проблема возникает из-за того, что определение функции может быть легко спутано с объявлением объекта, который использует конструктор с пустыми скобками
Чтобы избежать проблемы most vexing parse, можно использовать универсальную инициализацию (uniform initialization) с помощью фигурных скобок {}
🏔 Эпикфейл: карьера катится к чертям
🤦♂️ У всех нас случались провалы в карьере, о которых не хочется распространяться. Неловкий момент на собеседовании, провал проекта из-за глупой ошибки, конфликт с начальством — такие ситуации хочется поскорее забыть. Однако часто именно они дают нам самые ценные уроки и закаляют как профессионалов.
📝 Поделитесь своей историей карьерного провала в нашем новом опросе и расскажите, к чему он привел в итоге. Быть может, эта ошибка позволила вам пересмотреть свой путь и выбрать более подходящую профессию? А может, вы сделали правильные выводы и сейчас добились успеха?
👉 Поделиться историей
🤦♂️ У всех нас случались провалы в карьере, о которых не хочется распространяться. Неловкий момент на собеседовании, провал проекта из-за глупой ошибки, конфликт с начальством — такие ситуации хочется поскорее забыть. Однако часто именно они дают нам самые ценные уроки и закаляют как профессионалов.
📝 Поделитесь своей историей карьерного провала в нашем новом опросе и расскажите, к чему он привел в итоге. Быть может, эта ошибка позволила вам пересмотреть свой путь и выбрать более подходящую профессию? А может, вы сделали правильные выводы и сейчас добились успеха?
👉 Поделиться историей
Uniform initialization
В С++ — это способ инициализации объектов с помощью фигурных скобок {}. Появившийся ещё в C++11. Позволяет инициализировать объекты без необходимости использования разных синтаксических конструкций в зависимости от типа данных
💡Плюсы
• Позволяет использовать один и тот же синтаксис для всех типов данных
• Более ясный и единообразный синтаксис
• Более строгая проверка типов во время компиляции
• Поддержка инициализации списками
• Позволяет передавать произвольное количество значений для инициализации объекта
В С++ — это способ инициализации объектов с помощью фигурных скобок {}. Появившийся ещё в C++11. Позволяет инициализировать объекты без необходимости использования разных синтаксических конструкций в зависимости от типа данных
💡Плюсы
• Позволяет использовать один и тот же синтаксис для всех типов данных
• Более ясный и единообразный синтаксис
• Более строгая проверка типов во время компиляции
• Поддержка инициализации списками
• Позволяет передавать произвольное количество значений для инициализации объекта
❗Остаться или уйти? Оптимальный срок работы на одном месте
Вы любите свою работу, интересные проекты вам гарантированы, зарплата повышается каждый год. Но вот уже 5 лет вы трудитесь в одной и той же компании. Не пора ли что-то изменить, пока мотивация окончательно не улетучилась?
Многие опытные айтишники сталкиваются с такой дилеммой. С одной стороны, текущее место работы устраивает. С другой — хочется разнообразия, новых задач и знаний
Должен ли современный IT-специалист менять работу чаще, чем раз в 5 лет? Или лучше наращивать экспертизу в рамках одной компании? А может дело совсем не в сроках, а в качестве задач и развитии карьеры
👉 Опрос по ссылке
Вы любите свою работу, интересные проекты вам гарантированы, зарплата повышается каждый год. Но вот уже 5 лет вы трудитесь в одной и той же компании. Не пора ли что-то изменить, пока мотивация окончательно не улетучилась?
Многие опытные айтишники сталкиваются с такой дилеммой. С одной стороны, текущее место работы устраивает. С другой — хочется разнообразия, новых задач и знаний
Должен ли современный IT-специалист менять работу чаще, чем раз в 5 лет? Или лучше наращивать экспертизу в рамках одной компании? А может дело совсем не в сроках, а в качестве задач и развитии карьеры
👉 Опрос по ссылке
std::initializer_list
std::initializer_list — это стандартный контейнер в C++, который представляет собой список значений одного типа. Он используется для передачи произвольного количества значений в функции и конструкторы классов
📋 Зачем это нужно?
std::initializer_list позволяет удобно инициализировать контейнеры и другие объекты с произвольным количеством значений без явного указания размера или создания временных массивов
std::initializer_list — это стандартный контейнер в C++, который представляет собой список значений одного типа. Он используется для передачи произвольного количества значений в функции и конструкторы классов
📋 Зачем это нужно?
std::initializer_list позволяет удобно инициализировать контейнеры и другие объекты с произвольным количеством значений без явного указания размера или создания временных массивов
🛠️ Inline assembly
Inline assembly — инструмент, который позволяет встраивать непосредственно ассемблерные инструкции в код. Это полезно, когда требуется оптимизировать производительность или реализовать операции, которые не могут быть выполнены с помощью стандартных средств языка
🌐 Ссылки
Inline assembly
Using Inline Assembly in C/C++
Inline assembly — инструмент, который позволяет встраивать непосредственно ассемблерные инструкции в код. Это полезно, когда требуется оптимизировать производительность или реализовать операции, которые не могут быть выполнены с помощью стандартных средств языка
🌐 Ссылки
Inline assembly
Using Inline Assembly in C/C++
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
🛠️ Что такое C++ Streams?
В контексте C++, потоки (streams) представляют собой механизм для работы с вводом и выводом данных. Они обеспечивают абстракцию над различными источниками и приемниками данных, такими как консоль, файлы и строки, позволяя программистам работать с ними с помощью общего интерфейса
Основные реализации потоков в C++
• std::cin и std::cout: Это стандартные потоки ввода и вывода, которые обычно используются для взаимодействия с консолью
• std::ifstream и std::ofstream: Это классы потоков для работы с файлами
• std::stringstream: Этот класс потока позволяет работать с данными как с потоком, хранящимся в строке. Он может использоваться для выполнения операций ввода-вывода с помощью строкового представления данных
Преимущества использования потоков
• Удобство в использовании
• Возможность абстрагировать ввод-вывод от конкретных источников и приемников данных
• Поддержку различных типов данных
В контексте C++, потоки (streams) представляют собой механизм для работы с вводом и выводом данных. Они обеспечивают абстракцию над различными источниками и приемниками данных, такими как консоль, файлы и строки, позволяя программистам работать с ними с помощью общего интерфейса
Основные реализации потоков в C++
• std::cin и std::cout: Это стандартные потоки ввода и вывода, которые обычно используются для взаимодействия с консолью
• std::ifstream и std::ofstream: Это классы потоков для работы с файлами
• std::stringstream: Этот класс потока позволяет работать с данными как с потоком, хранящимся в строке. Он может использоваться для выполнения операций ввода-вывода с помощью строкового представления данных
Преимущества использования потоков
• Удобство в использовании
• Возможность абстрагировать ввод-вывод от конкретных источников и приемников данных
• Поддержку различных типов данных
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
🎮👨💻 15 игр, которые научат программированию
А также помогут подготовиться к техническому собеседованию, развить алгоритмическое мышление и просто провести свободное время с пользой
👉 Читать статью
А также помогут подготовиться к техническому собеседованию, развить алгоритмическое мышление и просто провести свободное время с пользой
👉 Читать статью