2013-09-24 101 views
1

我遍历一个列表,我想使用const_iterator。但我不知道该怎么做!到目前为止,我使用迭代器,我用这种方式实现了我的功能。任何人都可以帮助我使用const_iterator吗?Qt C++如何使用QList < > :: 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++; 
    } 
} 

回答

4

用于重复的QList一些其他的变种:

使用ConstIterator /常量性:

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是一个一元函数或仿函数,以Vehicle作为参数。

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

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

QList提供了STL风格的迭代器和Java风格的迭代器。 QList::const_iterator类为QListQQueue提供STL型常量迭代器。默认的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; 
      //... 
    } 
0

或STL类:

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