Библиотека С# С++
https://t.me/+WgGTjeH0p1NjMDFi - ссылка на канал По всем вопросам- @workakkk @ai_machinelearning_big_data - Machine learning @itchannels_telegram - 🔥лучшие ит-каналы @csharp_ci- C# академия @pythonlbooks- python книги📚 РКН: clck.ru/3Fmvsw
Show more📈 Analytical overview of Telegram channel Библиотека С# С++
Channel Библиотека С# С++ (@cpluscsharp) is an active participant. Currently, the community unites 10 083 subscribers, ranking 11 611 in the Technologies & Applications category and 62 504 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 10 083 subscribers.
According to the latest data from 05 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 0 over the last 30 days and by -5 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 7.15%. Within the first 24 hours after publication, content typically collects 3.64% reactions from the total number of subscribers.
- Post reach: On average, each post receives 721 views. Within the first day, a publication typically gains 367 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 3.
- Thematic interests: Content is focused on key topics such as c++, rust, github, .net, asp.net.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“https://t.me/+WgGTjeH0p1NjMDFi - ссылка на канал
По всем вопросам- @workakkk
@ai_machinelearning_big_data - Machine learning
@itchannels_telegram - 🔥лучшие ит-каналы
@csharp_ci- C# академия
@pythonlbooks- python книги📚
РКН: clck.ru/3Fmvsw”
Thanks to the high frequency of updates (latest data received on 06 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
struct Animal { int age; char name[32]; };
struct Dog {
struct Animal base; // обязательно первым
char breed[32];
};
struct Dog d = { {3, "Rex"}, "Labrador" };
print_animal((struct Animal *)&d); // работает
Почему это законно: стандарт C гарантирует, что в начале структуры нет паддинга, а указатель на структуру, приведённый к нужному типу, указывает на её первое поле. Поэтому &d и &d.base это один и тот же адрес, и функция, которая ждёт Animal*, спокойно работает с Dog.
Это не трюк из головоломок, а основа реальных систем. Так устроены объекты в CPython, где каждая структура начинается с PyObject_HEAD, так же работают GObject в GTK и многие структуры ядра Linux. Если родитель лежит не первым полем, ядро достаёт его через макрос container_of.
Есть важная оговорка: обратное приведение Animal* в Dog* корректно, только если объект действительно Dog. Компилятор этого не проверит, и ошибка здесь превращается в тихое повреждение памяти.utf8d выполняет две задачи:
* определяет класс очередного байта;
* выбирает следующее состояние автомата.
`ACCEPT` означает, что кодовая точка полностью прочитана. `REJECT` - обнаружена ошибка. Остальные состояния означают, что нужны дополнительные байты.
Подход удобен для потоковой обработки: если символ разорван между двумя сетевыми пакетами, достаточно сохранить состояние и накопленное значение.
Нюанс: после последнего байта тоже нужно проверить состояние. Если оно не ACCEPT, строка некорректна - например, оборвалась посреди символа.std::map<std::string, ...> не обязан создавать временный std::string при каждом поиске
Если ключ уже приходит как std::string_view, можно использовать transparent comparator:
std::map<std::string, int, std::less<>> status_codes{
{"not_found", 404},
{"timeout", 504}
};
std::string_view key = "timeout";
auto match = status_codes.find(key);std::weak_ptr может удерживать память даже при expired() == true.
Причина в std::make_shared: обычно он размещает объект и управляющий блок в одной аллокации.
В примере на скриншоте массив на 16 МиБ находится прямо внутри Blob. После удаления последнего shared_ptr:
* деструктор объекта вызывается;
* expired() возвращает true;
* общий блок памяти остаётся выделенным, пока существует хотя бы один weak_ptr.
После сброса последней слабой ссылки блок можно освободить.
Что делать: удалять протухшие ссылки из долгоживущих кешей. Для крупных объектов также можно рассмотреть отдельную аллокацию через std::shared_ptr<Blob>(new Blob()).
Нюанс касается размера самого объекта. Если данные хранятся в обычном std::vector, его отдельный буфер освобождается при вызове деструктора.
[Разбор от Microsoft](https://devblogs.microsoft.com/oldnewthing/20230815-00/?p=108602)std::list
- но случайного доступа через [] нет
- порядок вставки не гарантируется
-
Особенно полезно для игровых движков, пулов соединений, систем частиц и других случаев, где объекты постоянно создаются и удаляются, а другие части программы хранят указатели на них.
Коротко: std::hive - не более быстрый vector, а скорее гораздо более cache-friendly альтернатива list.
https://sandordargo.com/blog/2026/09/02/cpp26-hive3 + 4 * 2
в постфиксную:
3 4 2 * +
После этого калькулятору уже не нужно каждый раз разбираться с приоритетами операторов и строить полноценное AST.
Как работает идея:
- один стек хранит операторы;
- второй поток формирует результат;
- операторы с более высоким приоритетом выходят раньше;
- скобки и ассоциативность обрабатываются по правилам стека.
В итоге выражение можно вычислять последовательно и без рекурсивного спуска.
Простой, старый и до сих пор очень красивый алгоритм для парсеров, калькуляторов и компиляторов.
#Algorithms #C #Programming #Compilers #ComputerScience
float kahanSum(const float *nums, int count)
{
float sum = 0.0f;
float correction = 0.0f;
for (int i = 0; i < count; ++i)
{
float adjusted = nums[i] - correction;
float next = sum + adjusted;
correction = (next - sum) - adjusted;
sum = next;
}
return sum;
}
Здесь correction запоминает ошибку округления, которая потерялась при предыдущем сложении.
Обычная сумма быстрее, но Kahan Summation полезен там, где важна численная точность:
- научные расчёты;
- статистика и аналитика;
- графика и симуляции;
- обработка больших массивов;
- накопление очень маленьких значений рядом с большими.
Метод предложил Уильям Кэхэн в 1965 году. Небольшое усложнение цикла может заметно уменьшить ошибку без перехода на более тяжёлый числовой тип.enum class: безопасно, но местами раздражает
enum class даёт строгую типизацию и не позволяет случайно смешивать значения с обычными числами.
Но есть нюанс: даже если enum используется как набор флагов,
Flags::Read | Flags::Write
не скомпилируется.
Для |, &, ^, ~ придётся вручную определить операторы и приводить значения к базовому типу.
Это правильное поведение с точки зрения type safety, но бойлерплейта становится заметно больше.
Поэтому в некоторых C++-проектах для битовых флагов до сих пор используют обычный enum внутри namespace: меньше защиты, зато код значительно проще.fopen
• открыть файл назначения
• выделить буфер через malloc
• читать кусками через fread
• записывать через fwrite
• освободить память и закрыть файлы
Всё честно и прямо: байты читаются из одного места и записываются в другое.
Именно поэтому C до сих пор так важен. Он не всегда самый удобный, но он показывает, что реально происходит под капотом.
После такого начинаешь лучше понимать не только язык, а саму систему.