矢量<>使用静态内存而不是动态分配

时间:2017-01-12 19:56:07

标签: c++ arrays c++11 vector static

我正在开发一个嵌入式应用程序,我喜欢使用像std::vector<>这样的容器。不幸的是我不能使用堆。因此无法使用std::vector<>。所以我正在寻找替代方案。

我见过boost static_vector,但就我所见,微控制器的升压方法似乎太重了。或者是否有在小型微控制器上使用boost的经验(例如只有static_vector?)

可以做出一个假设:整个应用程序运行时期间的最大条目数在编译时是已知的。

所以我想知道是否有任何开源解决方案,或者我是否必须自己实现一个基于std::array<>实现的容器并添加一些逻辑来启用以下操作:

在运行时添加(push_back())和删除(erase())元素。提供典型的容器迭代器和随机访问。此外,短手for ( : )循环应该可用。

所以我的天真方法是:

  • 提供迭代器,随机访问对我来说似乎很容易,而且应该主要基于std::array<>函数

  • 添加添加(push_back)和删除(erase)应该对某些逻辑没有问题。

  • for ( : )循环支持如何实现?

  • 我还需要考虑其他事项吗?

1 个答案:

答案 0 :(得分:7)

您可以使用自定义std::vector创建std::allocator,例如从静态缓冲区返回指针。

重读你的问题,你说容器内的条目总数在编译时是已知的,为什么不使用std::array然后使用一个好的老式数组呢?

对于范围based for loop (for ( : )),它只需要为该类型定义beginend成员或自由函数,因此如果您确实创建了自己的类型,则需要定义这些。