我有兴趣获取子字符串,然后将其转换为long int
以进行进一步处理。我需要为大量字符串执行此操作。目前我所做的是使用.substr()
,如以下示例Test所示。
// Example program
#include <iostream>
#include <string>
int main()
{
std::string content = "123421341234432231112343212343";
unsigned long int sub = atol(content.substr(0,18).c_str());
std::cout << "sub: " << sub << '\n';
return 0;
}
我想知道最快的方法。它并不总是.substr(0,18)
,它可以是长度为18的任何长度(如果不是18则为剩余长度).substr(i,18)
。
修改
关于字符串的数量,大约3000万,约快(我认为获得子字符串副本然后转换为long int是一个缓慢的过程。我希望它比.substr()
方法更快)。说实话,我希望它尽可能快。
实际上,字符串位于fasta
文件中,我每次都会读取这些字符串,并按boost::split()删除不需要的内容并存储所需内容。然后我需要进行不同的传递,获取字符串的不同子串以供进一步处理。
答案 0 :(得分:2)
获取子字符串并以最快的方式转换为长整数
...... 几乎肯定是错误的问题。
有了警告,你应该首先测量,并且应该知道你真正需要什么样的表现,并且你还没有给我们足够的信息来帮助他们:
以当前形式创建字符串和子字符串可能比整数转换要昂贵得多,因此您不必担心错误的事情。分析首先会显示出来。
所以(在分析并假设我猜对了之后),首先要消除复制和动态分配:完全停止使用std::string
和substr
。直接在原始缓冲区上工作。