大型,偶然拼接列表的数据结构选择

时间:2013-09-28 21:49:41

标签: c++ data-structures

我的情况如下。我有几个(5-15)相当长(~500,000)的两个浮点数列表。我需要能够快速构建它们,迭代它们(进行计算并在过程中修改或重建它们),然后在最后将它们拼接在一起以获得具有所有点的单个结构,然后我将对此进行处理迭代。

什么是结构的好选择? std::list速度非常缓慢push_back(这是我目前的解决方案,构建列表占据了我运行时的50%),但std::vectorstd::deque似乎是他们的' d永远编写最终列表。

编辑:我忘了提 - 我需要至少对每个列表进行一次排序。不确定是否重要。

1 个答案:

答案 0 :(得分:0)

如果您事先知道矢量的确切大小,则可以创建一个大vector然后迭代大矢量的不同部分,例如:

std::vector<Point> data;
data.resize(totalSize); // totalSize is the sum of the sizes of the individual vectors
generatePart1(data.begin(), data.begin() + sizeOfPart1);
generatePart2(data.begin() + sizeOfPart1, data.begin() + sizeOfPart1 + sizeOfPart2);
// ...
iteratePart1(data.begin(), data.begin() + sizeOfPart1);
//...
//You don't need to splice the vectors now anymore, it's one big vector already.

如果您无法提前知道确切的大小,或者不喜欢这种方法,您仍然可以使用std::vector::reserve提前预留至少大部分存储空间,然后使用智能迭代器按顺序迭代所有单个向量以进行拼接。