【发布时间】:2011-04-15 20:36:27
【问题描述】:
当存储一堆项目并且我不需要随机访问容器时,我使用的是std::list,这基本没问题。但是,有时(尤其是当我只是将条目推回后面并且从不删除中间某处时),我希望我有一些具有更好性能的结构来添加条目。
std::vector 不好,因为:
- 如果不再适合,则必须重新分配。
- 它实际上不适用于大量数据(因为您不能总是获得非常大的连续可用内存块)。
std::list 不好,因为:
- 它对每一个 push_back 进行分配。这很慢,会导致大量内存碎片。
所以,介于两者之间的东西就是我想要的。
基本上,我想要std::list< boost::array<T, 100> > 之类的东西。或者也许不是100,而是4096/sizeof(T)。也许还有std::list< std::vector<T> >,第一个向量可以很小,然后可以增长。实际上我想隐藏它的使用,所以我可以做一个mycontainer.push_back(x)。
std::rope 有点类似,但标准中没有。
Boost 里面有这样的东西吗?
【问题讨论】:
-
为什么不直接使用 SGI 发行版的rope 类?许可证中有广告条款,但除此之外,为什么不呢?
-
@Albert,你说你只是用 push_back 存储一堆项目。那么 std::vector 有什么问题呢?为什么更喜欢 std::list?
-
@ybungalobill:
std::vector不适合非常大的数据块,因为内存只是连续分配的。 -
@Matt:我希望它可以在任何地方工作(即在所有可能的 STL 实现的编译器上)。
-
@AshleysBrain:这给了我什么好处(除了在前面不断插入,我在这里不关心)?
标签: c++ arrays boost stl vector