我有這些市場tick數據的大型pcap文件。平均而言,它們每個都是20GB。這些文件被分成數據包。數據包分爲標題和消息。消息分爲標題和字段。字段分爲字段代碼和字段值。將char向量轉換爲字符串的最有效方式
我正在一次讀取文件中的一個字符。我有一個文件讀取器類,它讀取字符並通過const ref將字符傳遞給4個回調函數,on_packet_delimiter,on_header_char,on_message_delimiter,on_message_char。消息對象使用類似的函數來構造它的字段。
到目前爲止,我注意到與僅僅閱讀字符而沒有對它們做任何事情相比,效率損失很小。
我的代碼的一部分,我正在處理消息標題並提取消息的工具符號,這會使流程變得相當慢。
void message::add_char(const char& c)
{
if (!message_header_complete) {
if (is_first_char) {
is_first_char = false;
if (is_lower_case(c)) {
first_prefix = c;
} else {
symbol_vector.push_back(c);
}
} else if (is_field_delimiter(c)) {
on_message_header_complete();
on_field_delimiter(c);
} else {
symbol_vector.push_back(c);
}
} else {
// header complete, collect field information
if (is_field_delimiter(c)) {
on_field_delimiter(c);
} else {
fp->add_char(c);
}
}
}
...
void message::on_message_header_complete()
{
message_header_complete = true;
symbol.assign(symbol_vector.begin(),symbol_vector.end());
}
...
在on_message_header_complete()
我喂字符來symbol_vector
。一旦頭完成,我使用矢量迭代器轉換爲字符串。這是做這件事最有效的方法嗎?
[此'std :: string'構造函數引用](http://en.cppreference.com/w/cpp/string/basic_string/basic_string)應該會有所幫助。 –
如果'symbol'是一個成員變量並且是空的,則它的效率與其獲得的一樣高。 – StoryTeller
儘管我給出了涉及複製的最有效的答案,但我仍然不明白爲什麼你首先需要'std :: vector'。從一開始就使用'std :: string'! –