Problème avec l'utilisation d'une list versus un vector
Bonjour,
J'utilise un code qui fait appel à une liste d'objets "Route" déclarée comme donnée membre privée de la classe RouteFactory:
Code:
list <Route> listRoute;
et un vecteur d'objets "Route*" déclarée comme donnée membre privée aussi dans cette même classe:
Code:
vector <Route*> pRoute;
La classe Route contient entre-autres la méthode suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
Status Route::getCurrentStatus(void)
{
Status lastStatus;
switch(m_curStatus)
{
case stop :
cout << "Route::getCurrentStatus: STOP status" << endl;
lastStatus = STATUS_VALUE_STOPPED;
break;
case start :
cout << "Route::getCurrentStatus: START status" << endl;
lastStatus = STATUS_VALUE_STARTED;
break;
case complete :
cout << "Route::getCurrentStatus: COMPLETE status" << endl;
lastStatus = STATUS_VALUE_COMPLETED;
break;
default :
cout << "Route::getCurrentStatus: DEFAULT status" << endl;
lastStatus = STATUS_VALUE_STOPPED;
break;
}
cout << "Route::getCurrentStatus: Play status is: " << lastStatus << endl;
return lastStatus
} |
Ces 2 données membres sont mis à jour lors de la création d'une instance "Route" dans la classe RouteFactory de cette manière:
Code:
1 2 3 4 5 6 7
|
Route *route = new Route();
if(route)
{
listRoute.push_back(*route);
pRoute.push_back(route);
} |
Dans la classe RouteFactory, j'ai la méthode suivante qui utilise nos données membres:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
void RouteFactory::listRoute()
{
for (std::list <Route>::iterator it = listRoute.begin() ; it != listRoute.end(); it++)
{
cout << "RouteFactory::listRoute: Status with iterator is: " << it->getCurrentStatus() << endl;
}
cout << endl;
for(unsigned int i = 0; i < pRoute.size(); ++i)
{
Route *p = pRoute.at(i);
cout << "RouteFactory::listRoute: Status with vector of pointer is: " << p->getCurrentStatus() << endl;
}
} |
J'obtiens les traces suivantes:
Citation:
Route::getCurrentStatus: STOP status
Route::getCurrentStatus: Play status is: 2
RouteFactory::listRoute: Play status with iterator is: 2
Route::getCurrentStatus: STOP status
Route::getCurrentStatus:: Play status is: 2
RouteFactory::listRoute: Play status with iterator is: 2
Route::getCurrentStatus:: STOP status
Route::getCurrentStatus:: Play status is: 2
RouteFactory::listRoute: Play status with vector of pointer is: 2
Route::getCurrentStatus:: START status
Route::getCurrentStatus:: Play status is: 0
RouteFactory::listRoute: Play status with vector of pointer is: 0
Le résultat attendu lors du test en question est d'obtenir 0 pour la deuxième instance parcouru.
J'aurais pensé que ces deux codes fournirait le même résultat.
Ma question est pourquoi avec l'utilisation de la liste d'objets listRoute, je récupère 2 au lieu de 0?
Merci d'avance.