从网络我收到某些条目。这是证券交易所报价,类似于:“HP 100 1”、“HP 101 10”、“HP 102 3”等。
一个网络数据包可能包含一个或多个条目。从理论上讲,网络数据包可以包含多少条目是有限制的:Maximum transmission unit of the network / sizeof(entry)
. 但是,此限制可能会因启动应用程序的机器和位置而异。
每次收到新数据包时,我都需要将条目存储在集合中。我删除了以前的项目,只是将新项目放在集合中。假设现在集合包含当前数量的项目,并且我收到了新数量的项目,而不是:
- 如果 NEW <= CURRENT 集合应该允许我 1) 重新配置第一个 NEW 项目。2) 将集合长度调整为新的 3) 不要丢弃其余的项目,因为它们将在下一个数据包处理期间被重用
- 如果 NEW > CURRENT 集合应该 1) 确保集合的容量足以存储新项目,如果它不足以调整集合的大小并设置所需的项目数量。2)允许我重新配置新项目。
所以这个想法很简单:
- 收藏应该增长,很快它的大小应该变成〜
Maximum transmission unit of the network / sizeof(entry)
- 之后,不应分配新对象,仅应重用和重新配置已分配的对象。即使收集长度减少到 1,其余 1000 个项目也不应该被丢弃,因为下一步收集长度将再次变为 1000,我将重用这些项目。
如果任何现有的stl
或boost
集合可以这样使用,还是我必须自己写?
实际上我可以为此使用纯数组 - 但大多数缺失的部分将是“自动增长”,因为即使在运行时我也无法计算最大大小。
另一种选择 - 我可以使用任何现有的集合,但另外存储自己的“大小”。并且永远不要减少集合的大小,而是始终使用“大小”的“我的”副本。因为我从不减少集合大小,所以它永远不会丢弃项目。这应该可行,但会有点“棘手”。