我有QVector的QVector。我想收集所有QVectors中的所有元素以形成新的QVector。
目前我使用像这样的代码
QVector<QVector<T> > vectors;
// ...
QVector<T> collected;
for (int i = 0; i < vectors.size(); ++i) {
collected += vectors[i];
}
但似乎operator+=
实际上是将每个元素附加到QVector
。那么QVector
或更合适的类型替换QVector
会有更多时间效用吗?
答案 0 :(得分:1)
如果真的需要,那么我会做类似的事情:
QVector< QVector<T> > vectors = QVector< QVector<T> >();
int totalSize = 0;
for (int i = 0; i < vectors.size(); ++i)
totalSize += vectors.at(i).size();
QVector<T> collected;
collected.reserve(totalSize);
for (int i = 0; i < vectors.size(); ++i)
collected << vectors[i];
但请注意,这听起来有点像过早的优化。正如the documentation所指出的那样:
QVector尝试通过预先分配最多两倍于实际数据需求的内存来减少重新分配的数量。
所以不要做这种事情,除非你确定它会改善你的表现。保持简单(就像你目前的做法一样)。
根据您对O(1)的额外要求进行编辑: 好吧,如果你随机插入它是linked list但是如果你只是追加(就像你提到的那样)你已经用QVector分摊了O(1)。看看the documentation for Qt containers。
答案 1 :(得分:0)
for (int i = 0; i < vectors.size(); ++i) {
for(int k=0;k<vectors[i].size();k++){
collected.push_back(vectors[i][k]);
}
}
外循环:从向量中取出每个向量
内循环:取出第i个向量中的每个元素并推入收集的
答案 2 :(得分:0)