Библиотека C/C++ разработчика
6.81K subscribers
655 photos
691 videos
8 files
941 links
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Download Telegram
Введение в регулярные выражения в современном C++

Регулярные выражения (Regular expressions или, вкратце, regex — регулярки) — это пока что непопулярная и недооцененная тема в современном C++. Но в то же время разумное использование регулярных выражений может избавить вас от написания множества строчек кода. Если у вас уже есть какой-никакой опыт работы в индустрии, но вы не умеете использовать регулярные выражения — вы разбазариваете 20-30% своей продуктивности. Я настоятельно рекомендую вам освоить регулярные выражение, так как это единовременная инвестиция в себя (по известному принципу “learn once, write anywhere”).

https://dev.to/visheshpatel/introduction-to-regular-expression-with-modern-c-1bn4

#cpp #programming

👉 @cpp_lib
👍5🔥32❤‍🔥1
[C++] Регулярные выражения regex_match

Часть 1 - Введение в регулярные выражения и regex_match
Часть 2 - Практическое применение регулярных выражений и regex_search, regex_replace.

источник

#cpp #programming

👉 @cpp_lib
4🔥3👍2🤷‍♂1
📚C++: Simple and Effective Tips and Tricks to learn C++ Programming Effectively
Автор: Benjamin Smith (2020)

Надоело искать среди множества учебников простое и удобное для чтения руководство? Программистский жаргон и неполные объяснения концепций замедляют обучение? Если вы ищете справочник, в котором освещаются фундаментальные и ключевые компоненты программирования на C++, эта книга отлично подойдет.

#cpp #programming

👉 @cpp_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42🔥21
Алгоритмы на С/С++

Задача о Ханойской башне
Быстрая сортировка (quick sort)
Бинарный поиск в отсортированном массиве
Сортировка методом выбора
Сортировка методом пузырька
Минимизация просмотров в методе сортировки пузырьком
Модифицированный метод пузырька
Сортировка методом вставок
Шейкер - сортировка

источник

#cpp #programming

👉 @cpp_lib
👍10
Как добавить non-copyable и non-movable объект в std::map или std::unordered_map

struct weird
{
int value;
std::mutex mtx;
};

std::map<int, weird> table;

table.insert({ 1, {} }); // nope
table.insert_or_assign(1, weird{}); // nope
table.emplace({ 1, {} }); // nope
table.emplace(1, weird{}); // nope
table.try_emplace(1, weird{}); // nope


https://devblogs.microsoft.com/oldnewthing/20231023-00/?p=108916

#cpp #programming

👉 @cpp_lib
👍3
Структурированная диагностика в новом окне сведений о проблеме

Многочисленные ошибки компилятора, в которых, кажется, невозможно разобраться, - бич многих разработчиков C++. Инструменты должны предоставлять лучший опыт, чтобы помочь вам понять диагностику и понять, как исправить корень проблемы.

https://devblogs.microsoft.com/cppblog/structured-diagnostics-in-the-new-problem-details-window/

#cpp #programming

👉 @cpp_lib
👍2
Высокотехнологичная компания YADRO в поиске тех, кто программирует на C и С++ 🔍

Актуальные вакансии:

1️⃣ Software Engineer C/C++
2️⃣ Senior C++ developer/Старший инженер-программист С++
3️⃣ Старший/ведущий инженер-программист встраиваемых интерфейсов
4️⃣ Linux Kernel Developer (Linux/WebUI) /Инженер-разработчик C (risc-V)

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

Что ещё тебя ждёт:

– достойная зарплата (размер обсуждается на собеседовании) и прозрачная система премий;
– обучение за счёт компании: учебный портал с курсами и лекциями от экспертов, дополнительное профессиональное обучение, изучение английского, участие в конференциях;
– возможность учиться у лучших специалистов индустрии, расти в рамках своей роли, а также участвовать во множестве различных проектов;
– личное участие в становлении процессов и продуктов, возможность увидеть результат своей работы;
– большое инженерное сообщество, которое постоянно развивается;
– гибридный или удалённый формат работы;
– ДМС со стоматологией с первого дня, консультации юристов, психологов, экспертов по ЗОЖ и управлению финансами;
– скидки для сотрудников, дополнительные day-off;
– комфортные офисы в Москве, Санкт-Петербурге, Нижнем Новгороде и Минске.

Откликайся по ссылкам и присоединяйся к YADRO!
Simple Term Colors

Библиотека C++17 для работы с цветами в терминале. С поддержкой RGB и HSL!

https://github.com/illyigan/simple_term_colors

#cpp #programming

👉 @cpp_lib
👍81
Объявляю ошибку вида if (x = 42) вымирающей и заношу её в Красную книгу C и C++ багов

Если спросить программиста, какие баги чаще всего можно встретить в C и C++ коде, он назовёт разыменование нулевого указателя, неопределённое поведение, выход за границу массива и другие, на его взгляд, типовые паттерны ошибок. Скорее всего, он назовёт и случайное присваивание в условии. Но действительно ли эта ошибка распространена в наше время?

Так уж сложилось, что в языке C и C++ для оператора присваивания используется символ =, а для сравнения ==. Как следствие, возможны опечатки, когда вместо сравнения пишут = и получают компилируемый, но неправильно работающий код.

https://habr.com/ru/companies/pvs-studio/articles/818215/

#cpp #programming

👉 @cpp_lib
👍31
Regular expressions library (since C++11)

Библиотека регулярных выражений предоставляет класс, представляющий регулярные выражения, которые являются своего рода мини-языком, используемым для выполнения сопоставления шаблонов в строках.

#include <iostream>
#include <iterator>
#include <regex>
#include <string>

int main()
{
std::string s = "Some people, when confronted with a problem, think "
"\"I know, I'll use regular expressions.\" "
"Now they have two problems.";

std::regex self_regex("REGULAR EXPRESSIONS",
std::regex_constants::ECMAScript | std::regex_constants::icase);
if (std::regex_search(s, self_regex))
std::cout << "Text contains the phrase 'regular expressions'\n";

std::regex word_regex("(\\w+)");
auto words_begin =
std::sregex_iterator(s.begin(), s.end(), word_regex);
auto words_end = std::sregex_iterator();

std::cout << "Found "
<< std::distance(words_begin, words_end)
<< " words\n";

const int N = 6;
std::cout << "Words longer than " << N << " characters:\n";
for (std::sregex_iterator i = words_begin; i != words_end; ++i)
{
std::smatch match = *i;
std::string match_str = match.str();
if (match_str.size() > N)
std::cout << " " << match_str << '\n';
}

std::regex long_word_regex("(\\w{7,})");
std::string new_s = std::regex_replace(s, long_word_regex, "[$&]");
std::cout << new_s << '\n';
}

https://en.cppreference.com/w/cpp/regex

#cpp #programming

👉 @cpp_lib
👍4
📚C++ High Performance for Financial Systems: Build efficient and optimized financial systems by leveraging the power of C++
Автор: Ariel Silahian (2024)

Краеугольным камнем этой книги является освещение вопросов проектирования и архитектуры систем. Книга начинается с описания роли C++ в финансах и трейдинге. Вы узнаете о принципах и методологии построения систем, способных обрабатывать огромные объемы данных, с легкостью выполнять сложные торговые стратегии и поддерживать высочайший уровень надежности. Вооружившись этими знаниями, вы сможете справиться даже с самыми сложными торговыми сценариями.

#cpp #programming

👉 @cpp_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍522
Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор?


Ответ:


⚫️Явное приведение типов в C++ происходит, когда программист явно указывает, что значение одного типа должно быть преобразовано в значение другого типа. Это делается с помощью операторов приведения типов, таких как static_cast, dynamic_cast, const_cast и reinterpret_cast¹.

⚫️Неявное приведение типов в C++ происходит автоматически, когда компилятор обнаруживает, что значение одного типа используется в контексте, где ожидается значение другого типа. Например, если вы пытаетесь присвоить значение типа int переменной типа double, компилятор автоматически преобразует значение int в значение double⁴.

⚫️Ключевое слово explicit используется для предотвращения неявных преобразований¹. Оно может быть использовано с конструкторами и функциями преобразования для указания того, что они не могут использоваться для неявных преобразований и копирования инициализации.

⚫️Например, если у вас есть класс с конструктором, который принимает один аргумент, вы можете использовать ключевое слово explicit, чтобы предотвратить неявное преобразование аргумента в объект вашего класса. Это может быть полезно, если вы хотите избежать ошибок, связанных с неожиданными неявными преобразованиями.

⚫️Вот простой пример использования ключевого слова explicit с конструктором:
class MyClass {
public:
explicit MyClass(int x) : m_x(x) {}
private:
int m_x;
};

int main() {
MyClass a = 5; // Ошибка: неявное преобразование запрещено
MyClass b(5); // ОК: явное преобразование
}


⚫️В этом примере конструктор класса MyClass объявлен как explicit, поэтому он не может использоваться для неявного преобразования значения int в объект класса MyClass. Попытка сделать это вызывает ошибку компиляции. Однако вы все еще можете использовать конструктор для явного преобразования значения int в объект класса MyClass, как показано в строке с объявлением переменной b.

#cpp #programming

👉 @cpp_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🥱21