要使用的动态容器类型

Which dynamic container type to use?

本文关键字:类型 动态      更新时间:2023-10-16

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

关于使用哪一个的任何建议?

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

编辑:它应该包含的元素类型是"无符号字符*"类型的原始数据包。我将如何编写 DC 的代码以包含此类类型?

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

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

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

对于可动态调整大小的容器,您最终可能会耗尽内存或给系统带来不可接受的延迟量。

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

要存储unsigned char*元素,您需要声明如下队列:

std::queue<unsigned char*> packetQueue;