我的情况如下。我有几个(5-15)相当长(~500,000)的两个浮点数列表。我需要能够快速构建它们,迭代它们(进行计算并在过程中修改或重建它们),然后在最后将它们拼接在一起以获得具有所有点的单个结构,然后我将对此进行处理迭代。
什么是结构的好选择? std::list
速度非常缓慢push_back
(这是我目前的解决方案,构建列表占据了我运行时的50%),但std::vector
和std::deque
似乎是他们的' d永远编写最终列表。
答案 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提前预留至少大部分存储空间,然后使用智能迭代器按顺序迭代所有单个向量以进行拼接。