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