Казалось бы, простой вопрос. Но копирование array работает совсем не так, как у vector.
Проблема: в C++ массивы не копируются обычным
=. Но std::array копируется. Как?std::array<int, 3> a = {1, 2, 3};
std::array<int, 3> b = a; // Копируются ВСЕ элементы!Под капотом компилятор генерирует:
b._data[0] = a._data[0];
b._data[1] = a._data[1];
b._data[2] = a._data[2];
array<int, 1000> будет сгенерировано 1000 операций присваивания. Или одна memcpy, если компилятор умный.Практический вывод: передавайте большие array по ссылке (
const std::array<T, N>&), иначе каждый вызов функции скопирует все N элементов.Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🙏4
This media is not supported in your browser
VIEW IN TELEGRAM
🥱2
Чем важна математика расскажет Мария Тихонова - кандидат компьютерных наук, руководитель исследовательского направления SberAI, доцент факультета компьютерных наук и преподаватель НИУ ВШЭ на курсе «Математика для Data Science» от Proglib Academy.
Курс предусматривает выполнение практического проекта с фидбеком от экспертов. За проект можно взять темы:
• обучите градиентный спуск для предсказания цен на квартиры
• создадите классификатор тональности или тематики текста
• построите простую рекомендательную систему на матричных разложениях
Бонусы:
- скидка 40% до 30 ноября
- если оплатить до конца ноября, получите курс «Базовая математика» в подарок
➡️ Пройти бесплатный тест на знание математики
Записаться на курс
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
Ваш файл включает половину стандартной библиотеки, а использует только std::vector?
IWYU (include-what-you-use) — инструмент от Google, который анализирует какие заголовочные файлы реально используются и предлагает минимальный набор
includes. Ускоряет компиляцию и делает зависимости явными.# Ubuntu
sudo apt install iwyu
# Из исходников с нужной версией clang
git clone https://github.com/include-what-you-use/include-what-you-use.git
# Анализ файла
include-what-you-use main.cpp
# С применением исправлений
include-what-you-use main.cpp 2>&1 | fix_includes.py
# Для всего CMake проекта
cmake -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=include-what-you-use ..
• Лишние includes — файлы, которые не используются
• Транзитивные includes — зависимости через другие заголовки
• Forward declarations — где можно заменить include на forward decl
• Неполные includes — когда используется тип, но не включён его заголовок
Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2🔥1
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
Какое главное преимущество spanstream перед stringstream?
Anonymous Quiz
9%
Автоматическое управление памятью
10%
Более быстрая работа со строками
65%
Работа с существующим буфером без аллокаций
7%
Поддержка Unicode
10%
Thread-safety
This media is not supported in your browser
VIEW IN TELEGRAM
🥱3
🤖 AI сейчас на пике — и математика снова в центре внимания.
Одна из топовых экспертов, кто сегодня участвует на AIJ, преподаёт у нас.
Мария Тихонова — PhD по Computer Science, руководитель направления в SberAI и доцент ВШЭ. Она работает с LLM каждый день и объясняет математику так, как она реально применяется в AI.
🔥 Экспресс-курс «Математика для DS» — 8 недель, чтобы закрыть пробелы и уверенно проходить собесы.
🎁 До 30 ноября:
→ скидка 40%
→ курс «Школьная математика» в подарок при оплате
→ бесплатный тест на знание основ математики
👉 Записаться на курс
«На конференции AIJ только и разговоров, что о AI и математике. Ведь в основе генеративных моделей Gen AI лежит фундаментальная математика.»
Одна из топовых экспертов, кто сегодня участвует на AIJ, преподаёт у нас.
Мария Тихонова — PhD по Computer Science, руководитель направления в SberAI и доцент ВШЭ. Она работает с LLM каждый день и объясняет математику так, как она реально применяется в AI.
🔥 Экспресс-курс «Математика для DS» — 8 недель, чтобы закрыть пробелы и уверенно проходить собесы.
🎁 До 30 ноября:
→ скидка 40%
→ курс «Школьная математика» в подарок при оплате
→ бесплатный тест на знание основ математики
👉 Записаться на курс
🥱6👍1😁1
🐸 Подборка вакансий для C++-разработчиков за неделю
Разработчик C++ — от 230 000 и до 250 000 ₽ Удалёнка
Middle C++ Developer (Core) — от 200 000 ₽ Удалёнка
Lead C++ Software Engineer (Gameplay) — Удалёнка
С++ Tools Developer — Гибрид (Москва)
Team Lead C++ — до 400 000 ₽ Удалёнка, гибрид (Москва)
Разработчик С++/ QML — Офис (Москва)
Библиотека C/C++ разработчика
Разработчик C++ — от 230 000 и до 250 000 ₽ Удалёнка
Middle C++ Developer (Core) — от 200 000 ₽ Удалёнка
Lead C++ Software Engineer (Gameplay) — Удалёнка
С++ Tools Developer — Гибрид (Москва)
Team Lead C++ — до 400 000 ₽ Удалёнка, гибрид (Москва)
Разработчик С++/ QML — Офис (Москва)
Библиотека C/C++ разработчика
👍2
Писал итераторы с кучей boilerplate для ленивого чтения? Или тащил ranges::views для простых генераторов?
C++23 добавляет
std::generator — coroutine-based ленивые последовательности. Пишешь как обычную функцию, получаешь итератор. Идеально для парсеров, ленивого чтения файлов, бесконечных последовательностей.#include <generator>
#include <print>
#include <fstream>
#include <string>
#include <optional>
// Простой генератор чисел Фибоначчи
std::generator<uint64_t> fibonacci(size_t count) {
uint64_t a = 0, b = 1;
for (size_t i = 0; i < count; ++i) {
co_yield a;
auto next = a + b;
a = b;
b = next;
}
}
// Ленивое чтение строк из файла
std::generator<std::string> read_lines(const std::string& filename) {
std::ifstream file(filename);
std::string line;
while (std::getline(file, line)) {
co_yield line;
}
}
// Генератор простых чисел (бесконечный)
std::generator<uint64_t> primes() {
co_yield 2;
std::vector<uint64_t> found_primes;
uint64_t candidate = 3;
while (true) {
bool is_prime = true;
for (auto p : found_primes) {
if (p * p > candidate) break;
if (candidate % p == 0) {
is_prime = false;
break;
}
}
if (is_prime) {
found_primes.push_back(candidate);
co_yield candidate;
}
candidate += 2;
}
}
// Генератор с трансформацией
std::generator<int> squares(int n) {
for (int i = 0; i < n; ++i) {
co_yield i * i;
}
}
void demo() {
// Первые 10 чисел Фибоначчи
std::print("Fibonacci: ");
for (auto num : fibonacci(10)) {
std::print("{} ", num);
}
std::println("");
// Первые 20 простых
std::print("Primes: ");
size_t count = 0;
for (auto prime : primes()) {
std::print("{} ", prime);
if (++count >= 20) break;
}
std::println("");
// Квадраты
std::print("Squares: ");
for (auto sq : squares(5)) {
std::print("{} ", sq);
}
std::println("");
}
generator вместо ручного написания итераторов для ленивых последовательностей. Память выделяется только под state coroutine. Можно делать бесконечные последовательности без риска.Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
🎉 Большая распродажа Proglib Academy — минус 40% на всё!
📚 Выбирай свой курс:
▫️ «Экспресс-курс по математике для DS» — получи фундамент для построения успешной карьеры в Data Science
▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «Специалист по ИИ» или «AI-агенты», или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.
▫️ «Архитектуры и шаблоны проектирования» — чтобы писать гибкий, масштабируемый код как мидл+ разработчик.
▫️ «Основы IT для непрограммистов» — для тех, кто хочет понимать, как устроены технологии, не будучи разработчиком.
🎁 Бонусы ноября:
▫️ Розыгрыш MacBook Pro 14 — купи любой курс и пройди 2 недели обучения до 30 ноября.
▫️ Бесплатный тест по математике — за 5 минут покажет, какие темы стоит подтянуть перед DS.
👉 Выбрать курс со скидкой
📚 Выбирай свой курс:
▫️ «Экспресс-курс по математике для DS» — получи фундамент для построения успешной карьеры в Data Science
▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «Специалист по ИИ» или «AI-агенты», или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.
▫️ «Архитектуры и шаблоны проектирования» — чтобы писать гибкий, масштабируемый код как мидл+ разработчик.
▫️ «Основы IT для непрограммистов» — для тех, кто хочет понимать, как устроены технологии, не будучи разработчиком.
🎁 Бонусы ноября:
▫️ Розыгрыш MacBook Pro 14 — купи любой курс и пройди 2 недели обучения до 30 ноября.
▫️ Бесплатный тест по математике — за 5 минут покажет, какие темы стоит подтянуть перед DS.
👉 Выбрать курс со скидкой