Что такое строковое представление C ++ в C ++ 17?

В C ++ стандартным способом работы со строками является std::string , поскольку он предоставляет пользователям множество удобных функций для работы. std :: string поддерживает строковые операции, такие как поиск подстрок, сравнение строк, конкатенация строк и нарезка строк (среди многих других).

Однако std :: string требует, чтобы пространство в буфере динамически выделялось, а больше памяти динамически выделялось каждый раз, когда операция выполняется над строкой.

Что такое string_view ?

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

Возможная псевдо-реализация string_view.

Примечание: std :: string_view не может изменять свои базовые данные и доступен только в версии C ++ 17 .

Зачем использовать std: : string_view ?

  • string_view полезно, когда вы хотите избежать ненужных копий.
  • String_views требует меньше памяти для создания и копирования. Создание string_view из литералов не требует динамического выделения.
  • Аналогично, при создании подстроки std :: string :: substr возвращает новую строку, которая потенциально предполагает динамическое размещение. Однако мы можем создать string_view из адреса позиции в нашей строке, чтобы гарантировать, что никакая новая память не будет выделяться динамически.

Код

Следующий код демонстрирует, как string_view помогает экономить память, предотвращая ненужные динамические выделения:

 #include  с использованием пространства имен std; int main () {std:  : string str = "Быстрая коричневая лиса перепрыгивает через ленивого пса. А потом убегает !!!"; //'string :: substr' возвращает новую строку//эта функция интенсивно использует память, особенно если строка действительно длинная std :: cout  

Другие функции, поддерживаемые string_view можно найти здесь, на официальной странице документации.

Оцените статью
nanomode.ru
Добавить комментарий