Qt C++ 如何使用 QList< >::const_iterator?

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

本文关键字:const iterator gt lt C++ 何使用 QList Qt      更新时间:2023-10-16

我正在遍历一个列表,我想使用const_iterator。但我不知道该怎么做!到目前为止,我使用迭代器并以这种方式实现我的函数。谁能帮我使用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++;
   }
 }

迭代 QList 的其他一些变体:

使用 ConstIterator/const_iterator:

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

Q_FOREACH(相当于foreach):

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

或者以 STL pre-C++11 的方式进行:

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

其中 SomeFunction 是一元函数或函子,将车辆作为参数。

如果可以使用 C++11 功能(取决于要支持的编译器),则可以使用基于范围的 for 循环:

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

或类似 STL:

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

QList同时提供STL风格的迭代器和Java风格的迭代器。QList::const_iterator 类为QListQQueue提供了一个 STL 风格的 const 迭代器。构造函数的默认QList::const_iterator创建未初始化的迭代器。您必须使用 QList 函数(如 QList::constBegin()QList::constEnd()QList::insert())对其进行初始化,然后才能开始迭代。

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