简体   繁体   中英

Qt C++ How to use QList< >::const_iterator?

I am iterating through a list and i want to use const_iterator. But i don't know how to do that! Until now i used iterator and i implemented my function this way. Can anyone help me to use const_iterator?

void MainWindow::populate(const QList<Vehicle> &vehicles)
{
int j = 0;
QListIterator<Vehicle> iter(vehicles);    
while(iter.hasNext()){
    Vehicle car = iter.next();
    //set car
    QString makeAndModel = car.getGeneralData().getMake() + car.getGeneralData().getModel();
    QStandardItem *mAndM = new QStandardItem(QString(makeAndModel));
    mAndM->setEditable(false);
    model->setItem(j,0,mAndM);

    //set type
    QStandardItem *type = new QStandardItem(QString(car.getGeneralData().getType()));
    type->setEditable(false);
    model->setItem(j,1,type);

    //set mileage
    QString mileageString = QString::number(car.getGeneralData().getMileage());
    QStandardItem *mileage = new QStandardItem(QString(mileageString));
    mileage->setEditable(false);
    model->setItem(j,2,mileage);

    //set year
    QString yearString = QString::number(car.getGeneralData().getYear());
    QStandardItem *year = new QStandardItem(QString(yearString));
    year->setEditable(false);
    model->setItem(j,3,year);

    //set registration
    QString regString = VehicleHelper::convertBoolToString(car.getRegistration().isRegistered());
    QStandardItem *regDate = new QStandardItem(QString(regString));
    regDate->setEditable(false);
    model->setItem(j,4,regDate);
    j++;
   }
 }

Some other variants for iterating a QList:

Using ConstIterator/const_iterator:

QList<Vehicle>::ConstIterator it = vehicles.constBegin();

for ( ; it != vehicles.constEnd(); ++it ) {
    const Vehicle& vehicle = *it;
    ...
}

Q_FOREACH (equivalent to foreach ):

Q_FOREACH (const Vehicle& vehicle, vehicles) {
    ...
}

Or do it the STL pre-C++11 way:

std::for_each(vehicles.begin(), vehicles.end(), SomeFunction())

where SomeFunction is an unary function or functor taking a Vehicle as argument.

If you can use C++11 features (depends on the compilers you want to support), you can use a range-based for loop:

for ( auto vehicle : vehicles ) {
    ...
}

QList provides both STL-style iterators and Java-style iterators. The QList::const_iterator class provides an STL-style const iterator for QList and QQueue . The default QList::const_iterator constructor creates an uninitialized iterator. You must initialize it using a QList function like QList::constBegin() , QList::constEnd() , or QList::insert() before you can start iterating.

     QList<Vehicle>::const_iterator iter;
     for (iter = vehicles.constBegin(); iter != vehicles.constEnd(); ++iter) {
           const Vehicle& vehicle = *iter;
           //...
     }

Or STL-like:

for(QList<Vehicle>::const_iterator it(list.begin());it!=list.end();++it)
{
    const Vehicle v(*it);
    ...
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM