QVector <qvector <>>大小

时间:2019-03-16 04:13:36

标签: c++ qt

我想知道对象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>>

的大小

2 个答案:

答案 0 :(得分:2)

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

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)

来自the documentation

  

at()可以比operator[]()更快,因为它永远不会导致出现深层复制。

答案 1 :(得分:2)

除了the answer by 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();
                                });