假设我有一个功能
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);
有没有办法在不实际创建临时对象的情况下实现这一目标?
答案 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 *通常不是一个好主意。