我正在为路由器(也就是网关)编写代码,当我接收和发送数据包时,我需要使用一种可以支持路由器逻辑的容器。当我收到一个数据包时,我希望将它放在动态容器的末尾(这里来自和称为DC)。将数据包从DC中取出进行处理时,我想从DC的前面取出它。
有关哪一个使用的建议?
我听说过一个矢量会是一个好主意,但我不确定它们是否是动态的。
编辑:它应包含的元素类型是“unsigned char *”类型的原始数据包。我如何编写DC的代码以包含这样的类型?
答案 0 :(得分:3)
std::deque<unsigned char *>
在这里是显而易见的选择,因为它支持高效的FIFO语义(使用push_back
和pop_front
,或push_front
和pop_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;