Библиотека C/C++ разработчика
6.81K subscribers
662 photos
703 videos
8 files
947 links
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Download Telegram
📌 Оптимизация кода: std::string_view вместо std::string

Привет, друзья! Сегодня хочу рассказать про std::string_view — полезный инструмент, который может значительно ускорить работу с строками в C++. Многие из вас, вероятно, используют std::string, но не всегда это лучший выбор.

Что такое std::string_view?
Это некопируемая, легковесная оболочка над строковыми данными. Она просто хранит указатель на начало строки и её длину, не создавая копии. Использование std::string_view вместо std::string позволяет избежать ненужных аллокаций памяти и ускорить код.

🔥 Пример использования:

#include <iostream>
#include <string_view>

void print(std::string_view str) { // Без лишнего копирования
std::cout << str << '\n';
}

int main() {
std::string s = "Hello, world!";
print(s); // Можно передавать std::string
print("Hi there"); // Можно передавать строковый литерал
}


🛠 Когда использовать?
При передаче строк в функции, если их не нужно модифицировать.
Для работы с подстроками (в отличие от std::string::substr, который делает копию).
Для обработки строк без создания динамических объектов.

⚠️ Важно помнить:
- std::string_view не владеет данными, поэтому нельзя использовать его для длительного хранения указателей на временные строки.
- Нужно быть осторожным с объектами, чей срок жизни может закончиться, пока std::string_view ещё используется.

🚀 Итог:
Использование std::string_view вместо const std::string& может ускорить работу с текстовыми данными и снизить нагрузку на аллокатор. Если не нужно изменять строку — это отличный выбор!

А вы уже используете std::string_view в своих проектах? Делитесь в комментариях! ⬇️

#cpp #programming

👉 @cpp_lib
👍5👏3
📌 5 способов ускорить компиляцию C++ проекта

Всем доброго вечера, или утра✌️Компиляция C++ — боль, особенно на больших проектах. Сегодня расскажу, как ускорить этот процесс.

🚀 1. Используйте ccache
🔹 ccache кеширует результаты компиляции и повторно использует их при неизменности исходного кода.
🔹 Установка (Linux/macOS):

sudo apt install ccache # для Ubuntu
brew install ccache # для macOS

🔹 Использование:

export CC="ccache g++"
export CXX="ccache g++"


2. Включите -j в make
🔹 Используйте make -jN, где N — количество потоков. Например:

make -j$(nproc) # на Linux
make -j$(sysctl -n hw.ncpu) # на macOS

🔹 Это позволяет компилятору использовать несколько ядер процессора.

🔥 3. Используйте pch (предкомпилированные заголовки)
🔹 Если у вас много инклудов в .cpp файлах, создайте pch файл:

// stdafx.h
#include <iostream>
#include <vector>
#include <map>


g++ -o stdafx.pch stdafx.h

🔹 Теперь подключайте stdafx.pch вместо кучи инклудов.

💨 4. Разделяйте сборку на модули
🔹 Используйте Unity Build (объединение нескольких .cpp в один).
🔹 Или попробуйте C++ модули (`export module`) в новых компиляторах.

🏎️ 5. Собирайте в Release с оптимизациями
🔹 Используйте -O2 или -O3, если важна скорость.
🔹 Для дебага — -Og:

g++ -Og -g main.cpp -o main


Как вы ускоряете сборку? Пишите в комментариях! 🚀

#cpp #programming

👉 @cpp_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🤣2
🧑‍💻 C++ шпаргалка

🔹 Основы синтаксиса:
int main() { ... }
Комментарии: // однострочный или /* многострочный */

🔹 Ввод/вывод:
cin >> x; — ввод
cout << x; — вывод

🔹 Типы данных:
int, float, double, char, bool, string

🔹 Условия и циклы:
if, else, switch
for, while, do-while

🔹 Функции:
returnType name(args) { ... }

🔹 Массивы и векторы:
int arr[10];
vector<int> v;

🔹 Стандартные библиотеки:
#include <iostream>
#include <vector>
#include <algorithm>

🔹 STL:
Векторы, карты, множества, строки, стек и очередь

📎 Подробнее: https://www.geeksforgeeks.org/cpp-cheatsheet/

#cpp #programming

👉 @cpp_lib
👍9😁6👎2