1

我有主

QStack<TypeFoo*> MainStack

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

QVector<TypeFoo*> OutPutVec

我喜欢将 OutPutVec 的元素添加到 MainStack 而不循环,如果堆栈将它们添加到底部,最好的方法是什么?我需要将我的 OutPutVec 转换为 QStack 吗?

这比循环好又快吗?

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

2 回答 2

3

QStack继承QVector,QVector有如下定义:

QVector & operator<< ( const QVector & other )

因此你应该能够简单地做

MainStack << OutPutVec;
于 2012-10-26T10:56:35.943 回答
0

通常,我使用运算符<<来附加容器。您可以选择其中一种变体。

这是运营商的实现+=

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“buns”,那么创建一个循环来复制数据是没有意义的。Qt 更快地追加数据,然后是你的循环

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

于 2012-10-26T09:24:08.200 回答