用于固定大小和预定义类型数据的 C++ vector 、列表或数组

标签 c++ arrays performance list vector

我正在尝试为新项目选择合适的数据类型以满足以下要求:

  • 非常好!时间紧迫(用于输入数据)
  • 不能对容器中的数据进行随机插入或任何操作(只读和顺序插入)
  • 大小将在编译时固定(因此不需要动态分配)
  • 数据将在某个定义的时间段后(通过线程或服务)按顺序删除,并且空白空间必须再次可用于新的数据。

例如。假设 1,2,3,4,5,6 插入到容器中。一段时间后,6 将被删除,7 将被插入,因此列表将是 7,1,2,3,4,5,然后 5 将被删除等等...但大小必须相同。

我想知道从性能和内存的角度来看,哪种数据结构最有效、最适合我的情况。

谢谢...

编辑:顺便说一下,它与基本的 FIFO 逻辑有点不同,因为假设我们创建了 10 个元素(大小)数据容器,但仅插入了 3 个元素,即使它还没有到达容器的末尾(大小限制) ),如果超过指定的时间,它将被删除。

顺便说一下,我正在考虑使用 boost:array,但对 std:vector 和 std:deque 有点困惑。这种情况有什么特别的优势吗?

最佳答案

你需要的是一个建立在固定大小数组上的循环缓冲区,这是非常简单且最快的数据结构。

您可以编写自己的循环缓冲区类或尝试使用循环缓冲区的boost 实现http://www.boost.org/doc/libs/1_54_0/libs/circular_buffer/doc/circular_buffer.html

关于用于固定大小和预定义类型数据的 C++ vector 、列表或数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19785253/

相关文章:

c++ - 为什么 std::vector 可能比原始动态分配的数组更快?

c++ - 为什么错误 1400 Invalid window handle?

javascript - 创建数组并跳过空字段

javascript - 如何在 JavaScript 中实现函数数组?

c# - C# 中的 ArrayList 性能测试

javascript - 无条件地将行为绑定(bind)到文档是否不好?

c++ - 使用 boost::asio 时是否需要实现阻塞?

c++ - 非类型模板参数 : pass to another method

c++ - 在 CMake 中处理多个 FIND_PACKAGE 调用

c# - 使用模式匹配来匹配具有非零下限的数组