0

我正在为路由器(又名网关)编写代码,并且在接收和发送数据包时,我需要使用一种可以支持路由器逻辑的容器。当接收到一个数据包时,我想把它放在动态容器的末尾(这里称为 DC)。当将数据包从 DC 中取出进行处理时,我想从 DC 的前面取出它。

关于使用哪一个有什么建议吗?

我听说向量是个好主意,但我不太确定它们是否是动态的..

编辑:它应该包含的元素类型是“unsigned char *”类型的原始数据包。我将如何为 DC 编写包含这种类型的代码?

4

3 回答 3

3

std::deque<unsigned char *>这里是显而易见的选择,因为它支持高效的 FIFO 语义(使用push_backand pop_front, or push_frontand pop_back,性能应该是一样的)。

以我的经验std::queue(这是一个通常构建的容器适配器std::deque)不值得付出努力,它只会限制界面而不会添加任何有用的东西。

于 2013-10-22T13:16:52.100 回答
2

对于路由器,您可能应该使用固定大小的自定义容器(可能基于 std::array 或 C 数组)。然后,您可以引入一些逻辑以允许将其用作循环缓冲区。固定大小非常重要,因为您需要处理数据包传入速度快于发送速度的情况。当你达到你的尺寸限制时,你就会流走。

使用动态调整大小的容器,您最终可能会耗尽内存或将不可接受的延迟量引入系统。

于 2013-10-22T13:33:09.030 回答
0

您可以使用std::queue. 您在末尾使用插入元素并使用push()从前面删除元素pop()front()返回前面的元素。

要存储unsigned char*元素,您需要像这样声明一个队列:

std::queue<unsigned char*> packetQueue;
于 2013-10-22T13:16:26.917 回答