在c ++中从缓冲区过滤不需要的数据的有效方法

时间:2018-05-23 21:52:14

标签: c++ string parsing

让我们假设,数据以下面的格式存储在字符缓冲区中

===========================================================================
|length| message1| length| message2| length| message3|...|length |messagen|
===========================================================================

长度 - 表示以下消息的大小

从这个字符缓冲区中,假设只有message2是不需要的,而rest all是相关的, 如何有效地删除message2,以便可以愉快地使用缓冲区中的所有数据?

我已经来到了就地算法,我们可以在没有任何额外副本的情况下在缓冲区中移动消息

但是,由于消息2无关紧要,因此存在转移(n-2)消息的开销

在c ++中有没有更好的方法/解决方案?

让我补充更多详情─ 这里的要求是需要从缓冲区中删除/过滤无关数据,然后将其作为输入传递给另一个函数进行进一步处理

无关数据可以来自字符缓冲区中的任何位置。例如,称为消息2

1 个答案:

答案 0 :(得分:1)

你不会说你的长度字段中有多少位,但假设你可以省去额外的一点来使长度值签名而不是无符号,我很想采用一个约定说"如果长度标题有负值,则表示其消息正文无效,应忽略"。

一旦你采用了这个约定,那么将消息2标记为无效就只是用其当前值的否定来覆盖它的长度标题。

当然,稍后读取缓冲区的代码也必须遵循约定,因此,例如如果它看到一个长度标题值为-57那么它应该向前跳过57个字节而不处理它们。