使用哪种动态容器类型?

时间:2013-10-22 13:13:01

标签: c++

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

有关哪一个使用的建议?

我听说过一个矢量会是一个好主意,但我不确定它们是否是动态的。

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

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

std::queue<unsigned char*> packetQueue;