|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||
Std::string_view - что за зверь и для чего в итоге нужен?11.06.2023, 16:31. Показов 1713. Ответов 13
Метки нет (Все метки)
Здравствуйте,
Подскажите пожалуйста, для чего нужен std::string_view ? В чем его принципиальное отличие от std::string ? Гугл подсказывает вот такие основные тезисы:
Единственно звучит так, как будто std::string_view - это просто какой то указатель на std::string или отдельный символ в строке. Но, если так, То не понятно, а в чем отличие от работы указателя на строку?
0
|
||
| 11.06.2023, 16:31 | |
|
Ответы с готовыми решениями:
13
Pragma link - что за зверь и для чего нужно? Почему std::string_view МЕДЛЕННЕЕ, чем std::string?
|
|
6099 / 2792 / 1037
Регистрация: 01.06.2021
Сообщений: 10,210
|
|
| 11.06.2023, 17:06 | |
|
Optimus11, если строка только для чтения, то начиная с С++17 рекомендовано использовать string_view, который производительнее обычной string. В том числе, именно ее и нужно передавать в функцию, а не константную string по ссылке и пр.
Optimus11, а тут указаны некоторые преимущества.
1
|
|
|
"C with Classes"
|
|
| 11.06.2023, 17:35 | |
|
Optimus11, std::string_view не владеет данными, в его распоряжении есть только указатель на константную строку и константные функции - члены. по этому этот класс стоит выбирать если не нужно менять исходные данные.
проще всего std::string_view представлять как константный std::string.
1
|
|
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||
| 11.06.2023, 17:42 [ТС] | ||
|
0
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 11.06.2023, 17:45 | |
|
Optimus11, чтобы память не выделять.
Вот например задача получить подстроку из строки. Если эту подстроку не предполагается менять, то подстрока в виде string_view гораздо эффективнее, чем подстрока в виде string, потому что не выделяется память, не производится копирование.
1
|
|
|
"C with Classes"
|
||||||
| 11.06.2023, 17:46 | ||||||
|
Optimus11,
1
|
||||||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|||
| 11.06.2023, 17:53 [ТС] | |||
|
Я банально вызову strstr(). strstr - вернет указатель на подстроку, размер подстроки мне и известен. Вот я и будут с ней работать ? Без всякого выделения дополнительной памяти. Или все так все посложнее ? Добавлено через 1 минуту Зачем мне посредник между в виде "sv" ?
0
|
|||
|
"C with Classes"
|
||
| 11.06.2023, 17:57 | ||
|
1
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||
| 11.06.2023, 18:01 | |||
Сообщение было отмечено Optimus11 как решение
РешениеЧтобы упростить код. string_view - это абстракция над кусочком строки. Вы можете отказаться от абстракций и снова спуститься на низкий уровень указателя на буфер и его размера, пожалуйста, но это неудобно. Все, что получите - это ручное воссоздание функциональности, которую делала абстракция, от которой вы отказались.
4
|
|||
|
"C with Classes"
|
|
| 11.06.2023, 18:12 | |
|
Optimus11, в большом проекте код написанный в ООП стиле читать проще чем код написанный в структурном стиле, повторюсь о важности выбора правильных абстракций, они помогают поддерживать и развивать большой проект.
( правильные интерфейсы между абстракциями тоже важны )
1
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 12.06.2023, 14:32 | |||||||
|
1. ты хочешь получить такой же удобный инструмент как std::string 2. в отличие от std::string, не кушает память. 3. умеет работать в компалтайме. причем, 3й пункт - это прям киллер фича. стандартные сишные функции такое не умеют. https://rextester.com/NGHP90826
5
|
|||||||
|
"C with Classes"
|
|
| 12.06.2023, 14:49 | |
|
0
|
|
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
||||||||||||
| 13.06.2023, 01:59 | ||||||||||||
Сообщение было отмечено Optimus11 как решение
Решениеatoi, потому что она не позволяет мне сконвертировать в число именно символы с 15-го по 18-ый. Попросить ее начать с 15 я могу, а вот попросить закончить на 18 - нет.Из-за этого приходится извращаться тем или иным образом: копировать подстроку в отдельную строку (очень неэффективно), вставлять временный \0 в С-строку (костыль и не всегда допустимо). Или приходится или разрабатывать дополнительные функции API, ориентированные на работу именно с подстроками в дополнение к API, ориентированному на работу с целыми строками (чревато комбинаторным взрывом количества вариантов).std::string_view призван унифицировать все подобные API. Это просто диапазон, который позволяет вам задать, от куда до куда должна работать функция. std::string_view не выделяет никакой дополнительной памяти. Фактически все функции, которые вы пишете для немодифицирующей обработки строк (т.е. функции, принимающие на вход некий условный const std::string &) должны принимать на вход именно std::string_view. В большинстве случаев в точке вызова такая замена пройдет безболезненно.Было
substr в первом варианте.Это касается не только строк, но и вообще всех последовательностей, в особенности для тех, которые непрерывно расположены в памяти. Изначально планировалось создать аналогичный std::vector_view и т.п., но в итоге эта идея была материализована в виде std::span - более общий аналог std::string_view для непрерывных последовательностей.
7
|
||||||||||||
|
"C with Classes"
|
|
| 13.06.2023, 18:06 | |
|
TheCalligrapher, для последовательностей которые поддерживают
LegacyContiguousIterator?так правильно говорить?
0
|
|
| 13.06.2023, 18:06 | |
|
Помогаю со студенческими работами здесь
14
Вывод строки std::string_view Scripting console -- что за зверь и нужен ли вообще? Что такое Sub и для чего он нужен targetver.h для чего он нужен что он делает ? Tomcat что такое и для чего он нужен? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|