繁体   English   中英

QVector <QVector<> &gt;大小

[英]QVector<QVector<>> size

我想知道QVector<QVector<type>>的对象中的QVector<QVector<type>> ,例如myobject 一种方法是如下设置一个for循环:

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>>的大小

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

temp = myobject[i];
for(int j=0; j<temp.size(); j++)
{
  siz += temp.size();
}

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

你需要:

int siz = 0;
for(int i=0; i<myobject.size(); i++)
{
   siz += myobject.at(i).size();
}

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

文档中

at()可以比operator[]()更快,因为它永远不会导致深度复制的发生。

除了R Sahu的回答之外,我只想指出,在外循环的每次迭代中,您都会获得内部QVector对象的免费副本。 您可能想要获取对内部向量的const引用。

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

int wholeSize = std::accumulate(m.cbegin(), m.cend(), 0,
                                [](int currentSize, const QVector<type> &v) {
                                  return currentSize + v.size();
                                });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM