как передать подстроку без фактического создания временного объекта в C ++ - PullRequest
4 голосов
/ 31 октября 2010

Допустим, у меня есть функция

str_rev(string &s, int len) {}

, которая переворачивает строку s длины len

Я хочу перевернуть подстроку длинной строки, начиная с индекса 5 и длиной 10

для этого я был вынужден сначала вызвать функцию подстроки, а затем вызвать функцию str_rev, передавая подстроку

sub_string = long_str.substr(5, 10)
str_rev(sub_string, 10);

Есть ли способ достичь этого без фактического создания временного объекта?

Ответы [ 4 ]

8 голосов
/ 31 октября 2010

Заставьте вашу функцию принимать итераторы (или, скорее, использовать std::reverse()) и передавать итераторы, разделяющие подстроку

3 голосов
/ 31 октября 2010

Может быть, вы просто хотите сделать это:

std::string::iterator it = long_str.begin() + 5;
std::reverse(it, it+10);
2 голосов
/ 31 октября 2010

вместо int len, передайте параметр, который определяет диапазон:

str_rev(string &s, const t_unsigned_range& range) {/* ... */}

и

str_rev(long_str, t_unsigned_range(5,10));
1 голос
/ 31 октября 2010

Если вы используете char * вместо std :: string, вы можете передать указатель на любые два символа в строке. Однако использование char *, как правило, не очень хорошая идея.

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