首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从QVector<QVector<T>>获取QVector<T>?

如何从QVector<QVector<T>>获取QVector<T>?
EN

Stack Overflow用户
提问于 2012-02-27 16:31:54
回答 3查看 4.1K关注 0票数 1

我有一个QVector的QVector。我想要收集所有QVectors中的所有元素来形成一个新的QVector。

目前,我使用的代码如下

代码语言:javascript
复制
QVector<QVector<T> > vectors;
// ...
QVector<T> collected;
for (int i = 0; i < vectors.size(); ++i) {
     collected += vectors[i];
}

但是看起来operator+=实际上是将每个元素附加到QVector中。那么,是使用QVector更省时,还是使用更合适的类型来替代QVector

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-27 16:49:18

如果你真的需要这样做(),我会这样做:

代码语言:javascript
复制
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吧。

票数 2
EN

Stack Overflow用户

发布于 2012-02-27 16:37:43

代码语言:javascript
复制
for (int i = 0; i < vectors.size(); ++i) {
    for(int k=0;k<vectors[i].size();k++){
        collected.push_back(vectors[i][k]);
    }
}

外部循环:从向量中取出每个向量

内循环:取出第i个向量中的每个元素并推送到collected中

票数 0
EN

Stack Overflow用户

发布于 2012-02-27 18:12:19

您可以使用Boost Multi-Array,它提供了一个多维数组。

它也是一个‘头文件’库,所以你不需要单独编译一个库,只需将文件头文件放到你的项目中的一个文件夹中并包含它们即可。

请参阅教程和示例的链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9462011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档