gpt4 book ai didi

c++ - vector<> 使用静态内存而不是动态分配

转载 作者:太空狗 更新时间:2023-10-29 20:10:09 32 4
gpt4 key购买 nike

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

我见过 boost static_vector但据我所知,升压方法对于微 Controller 来说似乎太重了。或者有没有在小型微 Controller 上使用boost的经验(例如只有static_vector?)

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

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

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

所以我天真的做法是:

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

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

  • 但是 for ( : ) 是怎样的呢?循环支持实现?

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

最佳答案

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

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

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

关于c++ - vector<> 使用静态内存而不是动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41621869/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com