QVector

QVector очень похож на QList.

Значением контейнера QVector могут быть простые типы данных (конечно же), классы, указатели на все, что угодно и т.д.

Тестируем управление списком QVector и наблюдаем значительные отличия от QList:

class A
{
public:
    A() // default ctor
    {
        ii=111;
    }
    A(int ii_) // users ctor
    {
        ii=ii_;
    }

    int ii;
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    QVector< A > vctr0;

    qDebug("----------- vctr0 append 3 pcs ---------------");

    vctr0.append(A());
    vctr0.append(A(222));
    vctr0.append(A(333));

    for(int ii=0; ii < vctr0.size(); ii  )
        qDebug("vctr0[%i]=%i ",ii, vctr0[ii].ii);

    // insert вставляет перед элементом, последующие смещает
    // и последний пропадает где-то
    vctr0.insert( 0, A(444));
    vctr0.insert( 2, A(555));

    qDebug("------------ vctr1.insert(0, A(444)); --------------");
    qDebug("------------ vctr1.insert(2, A(555))); --------------");

    for(int ii=0; ii < vctr0.size(); ii  )
        qDebug("vctr0[%i]=%i ",ii, vctr0[ii].ii);

    qDebug("------------ vctr0.remove(1); --------------");

    vctr0.remove(1);

    for(int ii=0; ii < vctr0.size(); ii  )
        qDebug("vctr0[%i]=%i ",ii, vctr0[ii].ii);

    qDebug("------------vctr0.resize(8); --------------");

    vctr0.resize(8);

    for(int ii=0; ii < vctr0.size(); ii  )
        qDebug("vctr0[%i]=%i ",ii, vctr0[ii].ii);

    qDebug("------------ vctr0.insert( 10, A(4440)); --------------");

    vctr0.insert( 10, A(4440));

    for(int ii=0; ii < vctr0.size(); ii  )
        qDebug("vctr0[%i]=%i ",ii, vctr0[ii].ii);

    return a.exec();
}

Получится такой вывод в консоль:

----------- vctr0 append 3 pcs ---------------
vctr0[0]=111
vctr0[1]=222
vctr0[2]=333
------------ vctr1.insert(0, A(444)); --------------
------------ vctr1.insert(2, A(555))); --------------
vctr0[0]=444
vctr0[1]=111
vctr0[2]=555
vctr0[3]=222
vctr0[4]=333
------------ vctr0.remove(1); --------------
vctr0[0]=444
vctr0[1]=555
vctr0[2]=222
vctr0[3]=333
------------vctr0.resize(8); -------------- у QList resize отсутствует
vctr0[0]=444
vctr0[1]=555
vctr0[2]=222
vctr0[3]=333
vctr0[4]=111 // Внимание: конструктор по умолчанию вызывается необходимое число раз до номера 7
vctr0[5]=111
vctr0[6]=111
vctr0[7]=111
------------ vctr0.insert( 10, A(4440)); -------------- у QList ошибки не будет, просто добавится последний элемент n раз
ASSERT failure in QVector::insert: "index out of range", file d:\qtsdk1.2.1_\desktop\qt\4.8.1\msvc2010\include\qtcore\qvector.h, line 363