📌 Оптимизация кода: std::string_view вместо std::string
Привет, друзья! Сегодня хочу рассказать про std::string_view — полезный инструмент, который может значительно ускорить работу с строками в C++. Многие из вас, вероятно, используют std::string, но не всегда это лучший выбор.
❓ Что такое std::string_view?
Это некопируемая, легковесная оболочка над строковыми данными. Она просто хранит указатель на начало строки и её длину, не создавая копии. Использование std::string_view вместо std::string позволяет избежать ненужных аллокаций памяти и ускорить код.
🔥 Пример использования:
🛠 Когда использовать?
✅ При передаче строк в функции, если их не нужно модифицировать.
✅ Для работы с подстроками (в отличие от
✅ Для обработки строк без создания динамических объектов.
⚠️ Важно помнить:
- std::string_view не владеет данными, поэтому нельзя использовать его для длительного хранения указателей на временные строки.
- Нужно быть осторожным с объектами, чей срок жизни может закончиться, пока
🚀 Итог:
Использование
А вы уже используете
#cpp #programming
👉 @cpp_lib
Привет, друзья! Сегодня хочу рассказать про 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. Используйте
🔹
🔹 Установка (Linux/macOS):
🔹 Использование:
⚡ 2. Включите
🔹 Используйте
🔹 Это позволяет компилятору использовать несколько ядер процессора.
🔥 3. Используйте
🔹 Если у вас много инклудов в
🔹 Теперь подключайте
💨 4. Разделяйте сборку на модули
🔹 Используйте
🔹 Или попробуйте C++ модули (`export module`) в новых компиляторах.
🏎️ 5. Собирайте в
🔹 Используйте
🔹 Для дебага —
Как вы ускоряете сборку? Пишите в комментариях! 🚀
#cpp #programming
👉 @cpp_lib
Всем доброго вечера, или утра
🚀 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++ шпаргалка
🔹 Основы синтаксиса:
Комментарии:
🔹 Ввод/вывод:
🔹 Типы данных:
🔹 Условия и циклы:
🔹 Функции:
🔹 Массивы и векторы:
🔹 Стандартные библиотеки:
🔹 STL:
Векторы, карты, множества, строки, стек и очередь
📎 Подробнее: https://www.geeksforgeeks.org/cpp-cheatsheet/
#cpp #programming
👉 @cpp_lib
🔹 Основы синтаксиса:
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