On Friday 10 July 2015 21:33:30 Thiago Macieira wrote:
> You really want to use a vector for everything except if:
> - you NEED O(1) insertion or deletion anywhere → use QLinkedList
> - you want stable element pointers even if the container is modified
> - copying your type is expensive and your container gets modified a lot
>
> The first two are extremely rare.
Indeed. So rare that in my professional career, with lots of STL use (I even
wrote a custom allocator once - yes, in production code), I have only ever
used std::list only to implement a poor man's concurrent queue (and that
requires splice(), which QLinkedList doesn't have):
// pop_front:
std::list<C> next;
{
const QMutexLocker locker(queueMutex);
next.splice(next.begin(), queue, queue.begin());
}
// use next.front()
// push_back
std::list<C> newItem = { ... };
{
const QMutexLocker locker(queueMutex);
queue.splice(queue.end(), newItem);
}
And the third is so hard to predict that one shouldn't try, but see whether
QVector doesn't offer enough performance.
So im my book, using QLinkedList or QList-for-list-behaviour or std::list is
almost certainly a premature optimisation, and in need of defending in the
commit message.
Thanks,
Marc
--
Marc Mutz <[email protected]> | Senior Software Engineer
KDAB (Deutschland) GmbH & Co.KG, a KDAB Group Company
Tel: +49-30-521325470
KDAB - The Qt Experts
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development