Библиотека С# С++
https://t.me/+WgGTjeH0p1NjMDFi - ссылка на канал По всем вопросам- @workakkk @ai_machinelearning_big_data - Machine learning @itchannels_telegram - 🔥лучшие ит-каналы @csharp_ci- C# академия @pythonlbooks- python книги📚 РКН: clck.ru/3Fmvsw
نمایش بیشتر📈 تحلیل کانال تلگرام Библиотека С# С++
کانال Библиотека С# С++ (@cpluscsharp) بازیگری فعال است. در حال حاضر جامعه شامل 10 083 مشترک است و جایگاه 11 611 را در دسته فناوری و برنامهها و رتبه 62 504 را در منطقه روسيا دارد.
📊 شاخصهای مخاطب و پویایی
از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 10 083 مشترک جذب کرده است.
بر اساس آخرین دادهها در تاریخ 05 اکتبر, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر 0 و در ۲۴ ساعت گذشته برابر -5 بوده و همچنان دسترسی گستردهای حفظ شده است.
- وضعیت تأیید: تأیید نشده
- نرخ تعامل (ER): میانگین تعامل مخاطب 7.15% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 3.64% واکنش نسبت به کل مشترکان کسب میکند.
- دسترسی پستها: هر پست به طور میانگین 721 بازدید دریافت میکند. در اولین روز معمولاً 367 بازدید جمعآوری میشود.
- واکنشها و تعامل: مخاطبان بهطور فعال حمایت میکنند؛ میانگین واکنش به هر پست 3 است.
- علایق موضوعی: محتوا بر موضوعات کلیدی مانند c++, rust, github, .net, asp.net تمرکز دارد.
📝 توضیح و سیاست محتوایی
نویسنده این فضا را محل بیان دیدگاههای شخصی توصیف میکند:
“https://t.me/+WgGTjeH0p1NjMDFi - ссылка на канал
По всем вопросам- @workakkk
@ai_machinelearning_big_data - Machine learning
@itchannels_telegram - 🔥лучшие ит-каналы
@csharp_ci- C# академия
@pythonlbooks- python книги📚
РКН: clck.ru/3Fmvsw”
به لطف بهروزرسانیهای پرتکرار (آخرین داده در تاریخ 06 اکتبر, 2026)، کانال همواره بهروز و دارای دسترسی بالاست. تحلیلها نشان میدهد مخاطبان بهطور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامهها تبدیل کردهاند.
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 до сих пор так важен. Он не всегда самый удобный, но он показывает, что реально происходит под капотом.
После такого начинаешь лучше понимать не только язык, а саму систему.