要使用的动态容器类型
Which dynamic container type to use?
我正在为路由器(又名网关)编写代码,当我接收和发送数据包时,我需要使用一种可以支持路由器逻辑的容器。当收到数据包时,我想将其放在动态容器的末尾(此处称为 DC)。将数据包从 DC 中取出进行处理时,我想从 DC 的前面取出数据包。
关于使用哪一个的任何建议?
我听说向量是个好主意,但我不太确定它们是否是动态的。
编辑:它应该包含的元素类型是"无符号字符*"类型的原始数据包。我将如何编写 DC 的代码以包含此类类型?
std::deque<unsigned char *>
在这里是显而易见的选择,因为它支持高效的FIFO语义(使用push_back
和pop_front
,或push_front
和pop_back
,性能应该是相同的)。
根据我的经验,std::queue
(通常是在std::deque
上构建的容器适配器)不值得付出努力,它只会限制接口而不添加任何有用的东西。
对于路由器,您可能应该使用固定大小的自定义容器(可能基于 std::array 或 C 数组)。然后,您可以引入一些逻辑以允许将其用作循环缓冲区。固定大小非常重要,因为您需要处理数据包传入速度快于发送数据包的速度的情况。当您达到大小限制时,您就会流出。
对于可动态调整大小的容器,您最终可能会耗尽内存或给系统带来不可接受的延迟量。
您可以使用std::queue
.您可以使用push()
在末尾插入元素,并使用pop()
从前面删除元素。 front()
返回前面元素。
要存储unsigned char*
元素,您需要声明如下队列:
std::queue<unsigned char*> packetQueue;
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 创建类类型的动态分配数组,其中类不得具有默认构造函数
- 非类类型表达式的静态类型与动态类型之间的差异
- 指针类型类成员的动态强制转换的恒定性是什么?
- 如何使用类型级函数动态创建静态类型?
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 复合类型的动态数组
- 根据动态选择类型C++模板使用情况
- 类型测试对象的动态数组的这两个声明之间的区别?
- 如何在一个属性中动态存储基元类型
- 动态调用具有不同返回类型的相同命名函数
- 如何在 Visual Studio 2015 中将项目的配置类型动态更改为静态库?
- C++基于子类型动态强制转换结构
- 基元类型动态分配数组的析构函数
- 如何根据要写入的数据类型动态选择文件句柄
- 如何从另一个实例的类型动态实例化新实例?C++