我有这些市场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'! –