如何传递子字符串而不在c ++中实际创建临时对象

时间:2010-10-30 21:53:39

标签: c++ string

假设我有一个功能

str_rev(string &s, int len) {}

反转长度为len的字符串s

我想要从索引5和长度10

开始反转长字符串的子字符串

为此我被迫首先调用substring函数然后调用str_rev函数传递子串

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

有没有办法在不实际创建临时对象的情况下实现这一目标?

4 个答案:

答案 0 :(得分:8)

让你的函数接受迭代器(或者更确切地说,使用std::reverse())并传入分隔子串的迭代器。

答案 1 :(得分:3)

也许你只想这样做:

std::string::iterator it = long_str.begin() + 5;
std::reverse(it, it+10);

答案 2 :(得分:2)

而不是int len,传递一个定义范围的参数:

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

str_rev(long_str, t_unsigned_range(5,10));

答案 3 :(得分:1)

如果使用char *而不是std :: string,则可以将指针传递给字符串中的任意两个字符。但是,使用char *通常不是一个好主意。