我正在开发一个嵌入式应用程序,我喜欢使用像std::vector<>
这样的容器。不幸的是我不能使用堆。因此无法使用std::vector<>
。所以我正在寻找替代方案。
我见过boost static_vector
,但就我所见,微控制器的升压方法似乎太重了。或者是否有在小型微控制器上使用boost的经验(例如只有static_vector?)
可以做出一个假设:整个应用程序运行时期间的最大条目数在编译时是已知的。
所以我想知道是否有任何开源解决方案,或者我是否必须自己实现一个基于std::array<>
实现的容器并添加一些逻辑来启用以下操作:
在运行时添加(push_back()
)和删除(erase()
)元素。提供典型的容器迭代器和随机访问。此外,短手for ( : )
循环应该可用。
所以我的天真方法是:
提供迭代器,随机访问对我来说似乎很容易,而且应该主要基于std::array<>
函数
添加添加(push_back
)和删除(erase
)应该对某些逻辑没有问题。
但for ( : )
循环支持如何实现?
我还需要考虑其他事项吗?
答案 0 :(得分:7)
您可以使用自定义std::vector
创建std::allocator
,例如从静态缓冲区返回指针。
重读你的问题,你说容器内的条目总数在编译时是已知的,为什么不使用std::array
然后使用一个好的老式数组呢?
对于范围based for loop (for ( : )
),它只需要为该类型定义begin
和end
成员或自由函数,因此如果您确实创建了自己的类型,则需要定义这些。