将char矢量转换为字符串

时间:2017-03-01 14:11:30

标签: c++

我有这些市场价格数据的大型pcap文件。平均每个20gb。文件被分成数据包。数据包分为标题和消息。消息分为标题和字段。字段分为字段代码和字段值。

我正在一次读取一个角色的文件。我有一个文件阅读器类,它读取字符并通过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。一旦标头完成,我使用矢量迭代器转换为字符串。这是最有效的方法吗?

2 个答案:

答案 0 :(得分:1)

怎么样:

std::string myStr(myVec.begin(), myVec.end());

虽然这有效,但我不明白为什么你需要首先使用矢量。只需从头开始使用std::string,然后使用myStr.append()添加字符或字符串。

以下是一个例子:

std::string myStr = "abcd";
myStr.append(1,'e');
myStr.append(std::string("fghi"));
//now myStr is "abcdefghi"

答案 1 :(得分:1)

除了量子物理学家的答案之外:std :: string的行为与矢量非常相似。如果您打算使用它来提高效率,即使是“保留”功能也可以在字符串类中使用。

添加字符非常简单:

std::string s;
char c = 's';
s += c;

您可以直接将这些字符添加到您的会员中,您也可以。但是如果你想保持你的成员清理直到收集整个字符串,你仍然应该使用std :: string对象而不是vector。然后,您将字符添加到临时字符串中,完成后,您可以交换内容。没有复制,只是指针交换(以及一些额外的数据,如容量和大小......)。

相关问题