Избегать получения подстроки? - PullRequest
0 голосов
/ 17 марта 2011

У меня есть ситуация, когда у меня есть std :: string, и мне нужны только символы от x до x + y, и я думаю, что это ускорило бы это немного, если бы я вместо этого мог как-то делать (char *) & string [ x], но проблема в том, что все мои функции ожидают завершенную строку NULL.

Что я могу сделать?

Спасибо

Ответы [ 5 ]

3 голосов
/ 17 марта 2011

Ничего хорошего нельзя сделать.Единственный прием, о котором я могу подумать, это временно установить s[x+y+1] на 0, передать &s[x], а затем восстановить персонажа.Но вы должны прибегать к этому ТОЛЬКО, если вы уверены, что это разумно повысит производительность, и это повышение необходимо

1 голос
/ 17 марта 2011

ничего (если нужная строка находится посередине).разница в скорости будет совершенно тривиальной, если ее не сделать ОЧЕНЬ (несколько миллионов)

0 голосов
/ 17 марта 2011

Вы можете перезаписать &string[x+y+1] с помощью NUL и передать &string[x] вашим функциям.Если после этого вам снова понадобится вся строка, вы можете сохранить ее на время и восстановить при необходимости.

0 голосов
/ 17 марта 2011

У вас нет выбора здесь. Вы не можете создать подстроку с нулевым символом в конце без копирования или изменения исходной строки.

Вы говорите, что «думаете, это ускорит это». Вы измерили?

0 голосов
/ 17 марта 2011

Использование:

string.c_str() + x;

Это предполагает, что ваша функция занимает const char *

Если вам нужно фактическое 0-окончание, вам придется скопировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...