我想知道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>>的大小?
发布于 2019-03-16 04:19:56
发布的代码中使用的逻辑是不正确的。
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[]()更快,因为它不会导致深拷贝的发生。
发布于 2019-03-16 06:05:22
除了萨胡岛的回答之外,我只想指出,在外部循环的每一次迭代中,您都会遇到内部QVector对象的一个不必要的副本。您可能希望获得对内部向量的const引用。
另一种方法是使用std::accumulate算法,即:
int wholeSize = std::accumulate(m.cbegin(), m.cend(), 0,
[](int currentSize, const QVector<type> &v) {
return currentSize + v.size();
});https://stackoverflow.com/questions/55193385
复制相似问题