【发布时间】:2015-10-18 22:36:45
【问题描述】:
我搜索的东西是 std::vector 但没有大的开销并且比 std::array 多一点,因为使用 std::array 我没有存储大小(它只能从类型本身知道) )。
我想要达到的目标:
用“动态”容器写成这样:
std::map< int, std::vector< std::pair<int,int>>>;
我在运行时不需要修改,但在运行时我需要大小信息。用 std::array 替换 std::vector 是行不通的,因为数组必须是所有映射条目的相同大小,这不是我需要的。
只有我!想问是否已经有可用的实现。如果答案只是“否”,则无需建议如何完成这项工作。我只想不再重新发明轮子:-)
背景:我可以在我的小型 avr 控制器上使用 stl,但开销“有点”高。所以我寻找一个有希望的标准实现,它满足编译时间常数表示的需求,并实现了诸如 begin()/end() 和迭代器之类的功能,以满足最低容器要求,以使它们与基于范围的 for 等一起使用。
c++14 也可用,如果我要搜索的话。
我发现的所有内容都是完整的模板实现,其中对数据的访问也是编译时间常量,例如:
container.get<2>()
我也无法使用,因为我需要运行时变量来访问我的数据。
编辑:使用 std::vector 时会出现哪个问题/开销:
在使用 std::vector 时,我还需要 new/delete,这会导致 avr 具有 malloc/free。我还发现,在 avr 上,向量本身的初始化对于我使用的每个模板实例都需要大约 350 字节的代码。 operator[] 这样的访问函数和迭代器都非常小。
【问题讨论】:
-
std::map<X>没有意义,key类型/值类型是什么? -
你在说什么“大开销”?
-
@kennytm:解决了这个问题!谢谢
-
@JonathanPotter:向问题添加一些信息。
-
你想要
const std::map<int, std::initializer_list<std::pair<int, int>>>吗?
标签: c++ c++14 avr compile-time-constant