在我的项目中,我必须迭代从index = 0开始的大字符串并获得长度k substring.我已经实现了string :: substr()并想知道是否还有其他有效的方法.
例如 :
std::string S ="ABCDEFGHIJKLMN"
Run Code Online (Sandbox Code Playgroud)
我需要得到长度= 5的所有子从S.Just像年初开始
"ABCDE","BCDEF","CDEFG"等..
我的实现如下:
void geekfunc(std::string &str)
{
unsigned int index=0;
for (; index<=(str.size()-K);++index)
{
++myseqmap[str.substr(index,K)];
}
}
Run Code Online (Sandbox Code Playgroud)
这个功能被称为千万次,我欢迎其他方法尝试.
如果您使用的是C++ 17,则可以将其string_view用作参数和映射键类型.这样,每次调用时都不会复制字符串内容substr.只需确保传递给函数的字符串在地图仍在使用时不会被销毁或修改.
std::map<std::string_view, std::size_t> myseqmap;
void geekfunc(std::string_view str)
{
unsigned int index=0;
for (; index<=(str.size()-K);++index)
{
++myseqmap[str.substr(index,K)];
}
}
Run Code Online (Sandbox Code Playgroud)