[英]Get substring in a fastest way
我有興趣獲取一個子字符串,然后將其轉換為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)
剩余長度) .substr(i,18)
。
編輯:關於字符串的數量,大約是3000萬,大約是快速的(我認為獲取子字符串副本然后轉換為long int是一個緩慢的過程。我希望它比.substr()
方法更快)。 老實說,我希望它盡可能快。
實際上,這些字符串位於一個fasta
文件中,我一次讀取每個文件,並通過boost :: split()刪除不需要的內容,並存儲所需的內容。 然后,我需要進行不同的處理,以獲取字符串的不同子字符串以進行進一步處理。
獲取子字符串並以最快的方式轉換為長整數
... 幾乎肯定是錯誤的問題。
對於警告,您應該始終首先進行評估,並且應該了解您實際需要的性能,並且您還沒有真正給我們足夠的信息來幫助他們:
以當前形式創建字符串和子字符串可能要比整數轉換昂貴得多,因此您擔心出現錯誤。 首先進行性能分析便可以證明這一點。
因此(在分析之后並假設我猜對了),首先消除復制和動態分配:完全停止使用std::string
和substr
。 直接在原始緩沖區上工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.