0Pricing
C++ Academy · Урок

Зачем нужен 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 — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужен string_view
  2. Создание представлений
  3. Подводные камни и время жизни
  4. Алгоритмы обработки строк
← Назад к C++ Academy