vector <> with static memory而不是dynamic allocation

And*_*eas 3 c++ arrays static vector c++11

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

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

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

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

在运行时期间添加(push_back())和remove(erase())元素.提供典型的容器迭代器和随机访问.还for ( : )应该提供短手循环.

所以我的天真方法是:

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

  • 某些逻辑应该添加add(push_back)和remove(erase)应该没有问题.

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

  • 还有其他我需要考虑的事情吗?

Tom*_*sen 7

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

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

至于基于loop(for ( : ))的范围,它只需要为类型定义beginend成员或自由函数,因此如果你创建自己的类型,则需要定义它们.

  • @Andreas这是一个自定义分配器的例子,它接近你正在寻找的东西(它可以做多一点,但你可以简化它以满足你的需要)https://howardhinnant.github.io/stack_alloc.html (2认同)