Qt最快的方法是将QVector元素添加到QStack,避免循环

时间:2012-10-26 08:42:14

标签: qt vector stack

我有主要的

QStack<TypeFoo*> MainStack

现在我有来自不同对象的方法输出

QVector<TypeFoo*> OutPutVec

我想将OutPutVec的元素添加到MainStack而不进行循环,只需将它们添加到底部(如果是堆栈),最好的方法是什么?我需要转换我的OutPutVec 到QStack?

这是好又快的循环吗?

QVector<T> & QVector::operator+= ( const QVector<T> & other )

2 个答案:

答案 0 :(得分:3)

QStack继承QVector,QVector具有以下定义:

  

QVector&amp;运营商LT;&LT; (const QVector&amp; other)

因此你应该能够简单地做到

MainStack << OutPutVec;

答案 1 :(得分:0)

通常,我使用operator <<作为追加容器。 您可以选择其中一种变体。

这是运营商+=

的实现
template <typename T>
QVector<T> &QVector<T>::operator+=(const QVector &l)
{
    int newSize = d->size + l.d->size;
    realloc(d->size, newSize);

    T *w = p->array + newSize;
    T *i = l.p->array + l.d->size;
    T *b = l.p->array;
    while (i != b) {
        if (QTypeInfo<T>::isComplex)
            new (--w) T(*--i);
        else
            *--w = *--i;
    }
    d->size = newSize;
    return *this;
}

实现运算符<<

inline QVector<T> &operator<<(const QVector<T> &l)
{ *this += l; return *this; }

PS。如果你可以使用Qt“包子”,创建一个复制数据的循环是没有意义的。 Qt更快地附加数据,然后是你的循环

PSS。如果您阅读助手,您可能会发现QStack继承自QVector。