🔥 Как правильно сравнивать
Доброй ночи! Давайте разберём важную тему – сравнение
✅ Способы сравнения строк
1️⃣ Оператор
Если вам нужно проверить точное совпадение строк:
Этот метод безопасен, читабелен и работает быстро.
2️⃣ Функция
Если нужно получить порядок строк в алфавитном сравнении:
🔹
-
-
-
3️⃣ Сравнение без учета регистра
В C++ нет встроенного метода, но можно использовать
4️⃣ Сравнение подстрок
Если нужно проверить, начинается ли строка с подстроки:
✅
🚀 Итоги
✔ Используйте
✔
✔ Для регистра –
✔ Для подстрок –
Какой метод вы чаще используете? Делитесь в комментариях!
#cpp #programming
👉 @cpp_lib
std::string
в C++? Доброй ночи! Давайте разберём важную тему – сравнение
std::string
в C++. Многие думают, что это просто (==
и всё), но есть нюансы! Давайте разберёмся. ✅ Способы сравнения строк
1️⃣ Оператор
==
Если вам нужно проверить точное совпадение строк:
std::string str1 = "hello";
std::string str2 = "hello";
if (str1 == str2) {
std::cout << "Строки равны!\n";
}
Этот метод безопасен, читабелен и работает быстро.
2️⃣ Функция
compare()
Если нужно получить порядок строк в алфавитном сравнении:
std::string str1 = "apple";
std::string str2 = "banana";
if (str1.compare(str2) < 0) {
std::cout << "apple идет перед banana\n";
}
🔹
compare()
возвращает: -
0
, если строки равны -
< 0
, если str1
меньше str2
-
> 0
, если str1
больше str2
3️⃣ Сравнение без учета регистра
В C++ нет встроенного метода, но можно использовать
std::transform
:
#include <algorithm>
#include <cctype>
#include <string>
bool caseInsensitiveCompare(const std::string& a, const std::string& b) {
return std::equal(a.begin(), a.end(), b.begin(), b.end(),
[](char c1, char c2) { return std::tolower(c1) == std::tolower(c2); });
}
std::string str1 = "Hello";
std::string str2 = "hello";
if (caseInsensitiveCompare(str1, str2)) {
std::cout << "Строки равны без учета регистра!\n";
}
4️⃣ Сравнение подстрок
Если нужно проверить, начинается ли строка с подстроки:
std::string text = "hello world";
std::string prefix = "hello";
if (text.rfind(prefix, 0) == 0) {
std::cout << "Строка начинается с 'hello'!\n";
}
✅
rfind(prefix, 0) == 0
проверяет, что prefix
стоит в начале строки.🚀 Итоги
✔ Используйте
==
для простого сравнения ✔
compare()
– если важно узнать порядок ✔ Для регистра –
std::tolower()
✔ Для подстрок –
rfind()
Какой метод вы чаще используете? Делитесь в комментариях!
#cpp #programming
👉 @cpp_lib
👍8👏4
📌 Оптимизация кода: 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
Как правильно вызывать CUDA
Вероятно, вам уже попадались подобные руководства по CUDA: хрестоматийный пример «Hello World», в котором перемешан код для ЦП и графического процессора. Всё это сложено в один гетерогенный файл с исходниками на CUDA C++, а для запуска ядра применяется синтаксис NVCC с тройными угловыми скобками <<<>>>, который уже стал культовым:
Время идёт, а такой паттерн по-прежнему попадается мне в продакшен-коде. Признаюсь, кое-где он всплывает и в моих любительских проектах — раз, два, три. Но это не лучшая идея, полагаться в серьёзном коде на запуск ядра через тройные угловые скобки. В таком случае программа не возвращает коды ошибок, поэтому может показаться обманчиво простой. Ниже вас ждут примерно 25 килобайт текста, в которых мы обсудим не самые корявые способы запуска ядер.
https://ashvardanian.com/posts/less-wrong-cuda-hello-world/
#cpp #programming
👉 @cpp_lib
Вероятно, вам уже попадались подобные руководства по CUDA: хрестоматийный пример «Hello World», в котором перемешан код для ЦП и графического процессора. Всё это сложено в один гетерогенный файл с исходниками на CUDA C++, а для запуска ядра применяется синтаксис NVCC с тройными угловыми скобками <<<>>>, который уже стал культовым:
#include <cuda_runtime.h>
#include <stdio.h>
__global__ void kernel() {
printf("Hello World from block %d, thread %d\n", blockIdx.x, threadIdx.x);
}
int main() {
kernel<<<1, 1>>>(); // Возвращает `void`?!
return cudaDeviceSynchronize() == cudaSuccess ? 0 : -1;
}
Время идёт, а такой паттерн по-прежнему попадается мне в продакшен-коде. Признаюсь, кое-где он всплывает и в моих любительских проектах — раз, два, три. Но это не лучшая идея, полагаться в серьёзном коде на запуск ядра через тройные угловые скобки. В таком случае программа не возвращает коды ошибок, поэтому может показаться обманчиво простой. Ниже вас ждут примерно 25 килобайт текста, в которых мы обсудим не самые корявые способы запуска ядер.
https://ashvardanian.com/posts/less-wrong-cuda-hello-world/
#cpp #programming
👉 @cpp_lib
👍5❤1