В C ++ стандартным способом работы со строками является std::string , поскольку он предоставляет пользователям множество удобных функций для работы. std :: string
поддерживает строковые операции, такие как поиск подстрок, сравнение строк, конкатенация строк и нарезка строк (среди многих других).
Однако std :: string
требует, чтобы пространство в буфере динамически выделялось, а больше памяти динамически выделялось каждый раз, когда операция выполняется над строкой.
Что такое string_view
?
По сути, string_view
— это только представление строки и не может использоваться для изменения фактической строки. Когда создается string_view
, нет необходимости копировать данные (в отличие от того, когда вы создаете копию строки). Кроме того, с точки зрения размера в куче string_view
меньше, чем std::string
.
Примечание:
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
можно найти здесь, на официальной странице документации.