簡體   English   中英

以最快的方式獲取子字符串

[英]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::stringsubstr 直接在原始緩沖區上工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM