当存储一堆项目并且我不需要随机访问容器时,我使用的是std::list
,这很好。但是,有时候(特别是当我只是将条目推回到后面并且从不删除中间的某个地方时),我希望我有一些结构可以更好地添加条目。
std::vector
很糟糕,因为:
std::list
很糟糕,因为:
所以,介于两者之间的是我想要的东西。
基本上,我想要std::list< boost::array<T, 100> >
左右的东西。或者也许代替100
,让它为4096/sizeof(T)
。也许也std::list< std::vector<T> >
,第一个矢量可以很小,然后可以进一步增长。实际上我想隐藏在使用中,所以我可以做一个mycontainer.push_back(x)
。
std::rope
有点类似,但标准中没有。
在Boost中有这样的东西吗?
答案 0 :(得分:10)
您是否考虑过使用std::deque
?它的元素不是连续存储的,但它允许随机访问元素;如果您只是在序列的开头或结尾插入元素,它可能会提供比std::vector
更好的性能。
答案 1 :(得分:1)
是的,它叫做std :: vector。这是O(1)时间push_back,几乎总是比std :: list快。 (是的,它也有记忆效率)
std :: list最重要的特性是从中间删除/插入常量时间。如果你不需要它,请选择std :: vector。