首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QVector<QVector<>>大小

QVector<QVector<>>大小
EN

Stack Overflow用户
提问于 2019-03-16 04:13:36
回答 2查看 157关注 0票数 0

我想知道QVector<QVector<type>>对象中的总元素数,myobject说。这样做的一种方法是按以下方式设置for-循环:

代码语言:javascript
复制
int siz;
QVector<type> temp;
for(int i=0; i<myobject.size(); i++)
{
    temp = myobject[i];
   for(int j=0; j<temp.size(); j++)
   {
     siz += temp.size();
   }
}

虽然可行,但我觉得这种方式相当累赘。是否有更有效或更整洁的替代方案来估计QVector<QVector<type>>的大小?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-16 04:19:56

发布的代码中使用的逻辑是不正确的。

代码语言:javascript
复制
temp = myobject[i];
for(int j=0; j<temp.size(); j++)
{
  siz += temp.size();
}

temp的大小多次添加到siz。它只需要添加一次到siz

你需要:

代码语言:javascript
复制
int siz = 0;
for(int i=0; i<myobject.size(); i++)
{
   siz += myobject.at(i).size();
}

正如@Mike所指出的,使用myobject[i]可能会导致深度复制。对于只读访问,请使用myobject.at(i)

来自文献资料

at()可以比operator[]()更快,因为它不会导致深拷贝的发生。

票数 2
EN

Stack Overflow用户

发布于 2019-03-16 06:05:22

除了萨胡岛的回答之外,我只想指出,在外部循环的每一次迭代中,您都会遇到内部QVector对象的一个不必要的副本。您可能希望获得对内部向量的const引用。

另一种方法是使用std::accumulate算法,即:

代码语言:javascript
复制
int wholeSize = std::accumulate(m.cbegin(), m.cend(), 0,
                                [](int currentSize, const QVector<type> &v) {
                                  return currentSize + v.size();
                                });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55193385

复制
相关文章

相似问题

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