【问题标题】:QVector<QVector<>> sizeQVector<QVector<>> 大小
【发布时间】:2025-12-24 13:05:13
【问题描述】:

我想知道QVector&lt;QVector&lt;type&gt;&gt; 的对象中的总元素数,比如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&lt;QVector&lt;type&gt;&gt;的大小

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

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

    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[]() 更快,因为它永远不会导致发生深拷贝。

    【讨论】:

      【解决方案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();
                                      });
      

      【讨论】: