加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 带有静态内存而不是动态分配的vector <>

发布时间:2020-12-16 10:05:02 所属栏目:百科 来源:网络整理
导读:我正在开发一个嵌入式应用程序,我喜欢使用像std :: vector这样的容器.不幸的是我不能使用堆.所以std :: vector无法使用.所以我正在寻找替代方案. 我见过boost static_vector,但据我所见,对于微控制器来说,升压方法似乎太重了.或者是否有使用小型微控制器上升
我正在开发一个嵌入式应用程序,我喜欢使用像std :: vector<>这样的容器.不幸的是我不能使用堆.所以std :: vector<>无法使用.所以我正在寻找替代方案.

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

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

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

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

所以我的天真方法是:

>提供迭代器,随机访问对我来说似乎很容易,而且应该主要基于std :: array<>功能
>添加add(push_back)和删除(erase)应该对某些逻辑没有问题.
>但是for(:)循环支持如何实现?
>还有其他我需要考虑的事情吗?

解决方法

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

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

对于范围based for loop (for ( : )),它只需要为类型定义开始和结束成员或自由函数,因此如果您创建自己的类型,则需要定义它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读