vectors vs. lists

David Faure faure at kde.org
Thu Feb 19 11:57:40 GMT 2004


On Thursday 19 February 2004 12:49, Werner Trobin wrote:
> On Thursday 19 February 2004 10:46, Marc Mutz wrote:
> 
> [...]
>  
> > It's really funny how STL-trained people default to std::vector<> in all 
> > their code, and you see std::list<> only very rarely, but you see 
> > QValueList used as a default in KDE/Qt, and in ways that involve 
> > indexing (O(n)! vs. O(1) in QVV). This loop, btw,:
> > 
> > for ( int i = 0 ; i < list.count() ; ++i )
> >    doSomethingWith( list[i] );
> > 
> > is O(n^2). Whereas these:
> 
> While I agree with all of your points this O(n^2) statement is not true. 
> Please check at() and especially locate() in QGList.

I almost had the same remark... and then I realized that although you are correct
for QPtrList/QPtrQueue/QPtrStack, Marc is correct about QValueList.

Q_INLINE_TEMPLATES Q_TYPENAME QValueListPrivate<T>::NodePtr QValueListPrivate<T>::at( size_type i ) const
{
    Q_ASSERT( i <= nodes );
    NodePtr p = node->next;
    for( size_type x = 0; x < i; ++x )
        p = p->next;
    return p;
}

=> don't use for(int i = 0; ...) and at(i) with a QValueList, use iterators!

-- 
David Faure, faure at kde.org, sponsored by Trolltech to work on KDE,
Konqueror (http://www.konqueror.org), and KOffice (http://www.koffice.org).




More information about the kde-core-devel mailing list