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

通常、<<追加コンテナーには 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の「buns」を使用できる場合、データをコピーするためのループを作成しても意味がありません。Qtはデータをより速く追加し、ループします

PSS。アシスタントを読むと、QStack が QVector から継承されていることがわかる場合があります。

于 2012-10-26T09:24:08.200 に答える