我想知道对象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>>
答案 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)
。
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();
});