Зачем нужен string_view
Избегайте копирования строк
«Зачем нужен string_view» — бесплатный урок C++ Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.
Цена копирования
Передача std::string по значению копирует весь буфер. При доступе только для чтения эта копия — напрасная работа. std::string_view — лёгкое представление, не владеющее данными, всего лишь указатель и длина. Подключите <string_view>.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "hello";
std::cout << sv << " len=" << sv.size() << "\n";
}Что хранит представление
string_view хранит только указатель на уже существующие символы и длину. Оно не владеет данными и не копирует их.
#include <iostream>
#include <string>
#include <string_view>
int main() {
std::string s = "world";
std::string_view sv = s; // views s, no copy
std::cout << sv << "\n";
}Параметры только для чтения
Принимая std::string_view, Вы делаете функцию совместимой с std::string, строковыми литералами и массивами char, не копируя ни один из этих объектов.
#include <iostream>
#include <string_view>
void greet(std::string_view name) {
std::cout << "Hi, " << name << "\n";
}
int main() {
greet("Ada");
greet(std::string("Bob"));
}Без выделения памяти
Создание представления никогда не выделяет память, поэтому его дёшево копировать и передавать по значению.
#include <iostream>
#include <string_view>
int main() {
std::string_view a = "constant text";
std::string_view b = a; // trivial copy
std::cout << (a == b) << "\n";
}Дешёвые подстроки
substr у представления возвращает другое представление той же области памяти, поэтому символы не копируются.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "abcdef";
std::cout << sv.substr(2, 3) << "\n"; // cde
}Сравнение с учётом производительности
Для функций, которые только просматривают текст, string_view исключает и выделение памяти в куче, и копирование, что важно в часто выполняемых циклах и при разборе.
Длина и индексация
Представление поддерживает привычный интерфейс: size(), empty(), индексацию и итерацию по диапазону.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "C++";
for (char c : sv) std::cout << c << "-";
std::cout << "\n" << sv.size() << "\n";
}Представления доступны только для чтения
Изменять символы через string_view нельзя: оно предоставляет только доступ для чтения. Для изменения нужна строка, владеющая данными.
От литерала к представлению
Строковые литералы непосредственно преобразуются в представления, поэтому передавать постоянный текст очень дёшево.
#include <iostream>
#include <string_view>
using namespace std::string_view_literals;
int main() {
auto sv = "literal"sv;
std::cout << sv.size() << "\n";
}Не замена строке
Используйте std::string, когда нужно владеть текстом, хранить или изменять его. Используйте std::string_view для временных параметров только для чтения.
Ограничение времени жизни
Поскольку представление не владеет данными, исходные символы должны существовать дольше представления. Неправильное использование приводит к висячим представлениям; это рассматривается в одном из следующих уроков.
Быстрая проверка
Проверьте своё понимание причин существования string_view.
Повторение
Вы узнали, зачем нужен string_view:
- Это не владеющее данными представление, состоящее из указателя и длины.
- Его приём позволяет избежать копирования и выделения памяти для текста, доступного только для чтения.
- Оно работает со строками, литералами и массивами char.
- Просматриваемые данные должны существовать дольше представления.
Часто задаваемые вопросы
Урок «Зачем нужен string_view» бесплатный?
Да — полный текст урока «Зачем нужен string_view» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.
Чему я научусь в уроке «Зачем нужен string_view»?
Избегайте копирования строк Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C++ Academy?
Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Зачем нужен string_view»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C++ Academy?
Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Зачем нужен string_view
- Создание представлений
- Подводные камни и время жизни
- Алгоритмы обработки строк