2009-04-16 3 views
0

J'ai une classe ici qui contiennent liste chaînée d'autres voitures de classe exempleComment j'appelle le tableau de la liste liée dans le main?

class transportation 
{ 
    private; 
    int id; 
    list <car> *cars; 
    int keyval; 
    public : 
     set() 
     { 
     } 

     void setTransportation(int ids, list <car> *carss, int keyvals) 
     { 
      id=ids; 
      cars[keyvals]=carss[keyvals]; 
      keyval=keyvals; 
     } 

     list <car> *getCars() 
     { 
      return cars; // I have to accessed cars list to be modified in my main 
         // is this how I do it ????? 
     } 

ci-dessus est seulement extrait de mon code. Ce que je dois faire est de mettre la liste des voitures dans la main, ainsi j'appellerai setTransportation dans la liste principale et passera dans la voiture pour établir la liste liée de la voiture. Est-ce que je fais la bonne chose sur setTransportation? Comme je dois dynamiquement allouer de la mémoire au tableau des voitures de liste, comment puis-je faire cela dans ma fonction principale?

int main() 
{ 
    car bmw; 
    transportation *ptr=new transportation; 
    list <car> carList[100]; 
    list <transportation> transportationList; 

    //other code 
     if (i == 0) { 
    bmw.setCar(iseq,type); 
    carList[k].push_back(bmw); 
    list <car> *inputList = (*ptr).getCars(); // is this how I accessed list from 
    inputList[k]=new list <car> [k];   // list class??? 
    (*ptr).setTransportation(iid,carList,k); 
    transportationList.push_back((*ptr)); 
    k++; 
    } 

Toute aide sera appréciée

+1

Veuillez marquer votre question avec la langue que vous utilisez. –

+0

oww, son C++, je vais le marquer. –

+0

privé; (point-virgule?) et ?) mate, votre code ne brille-t-il pas en rouge dans votre IDE? –

Répondre

1

Jetez un oeil à iterators.

+0

voulez-vous dire que j'ai besoin d'utiliser itérateur? mais initialement, ma liste ne contiendrait rien, pourquoi devrais-je utiliser itérateur alors? –

+0

Mais comme le dit Skurmedel, si vous copiez d'une liste à une autre, un itérateur est un choix idéal. –

1

Dans setTransportation, vous pouvez passer une référence à une liste std :: et copier toutes les voitures de l'ancienne liste vers cette dernière. Ceci est fait avec les itérateurs (voir grahams réponse) et la méthode d'insertion.

Exemple:

std::list<car> cars(); 
// Fill cars with values. 
std::list<car> otherCars(); // We could use copy-constructor here but not relevant. 
otherCars.insert(otherCars.begin(), cars.begin(), cars.end()); // First argument is the position where you want to insert the values. 

setTransportation pourrait donc ressembler à ceci:

setTransportation(int id, const std::list<car> &cars, int keyvals) 
{ 
    id = id; 
    this->cars.insert(this->cars.begin(), cars.begin(), cars.end()); 
    keyvals = keyvals; 
} 

Notez que vous devez changer le type de "voitures" dans le transport de « std :: liste < voiture > "au lieu de" std :: list < car> * "qui est un pointeur vers une liste de voitures.

Si vous avez un "using namespace std;" En haut de votre fichier, vous n'avez pas besoin du préfixe std :: - devant la liste < T>.

1

Vous avez une bonne quantité de code discutable dans votre exemple. J'aimerais en signaler quelques-unes pour m'assurer que la signification de votre code reflète réellement vos intentions.

list <car> *cars; 

Ceci est un pointeur vers une liste de voitures. un pointeur n'est probablement pas nécessaire

list <car> carList[100]; 

Ceci est un "tableau de 100 éléments de listes d'objets de voiture". Vous avez peut-être pensé que vous étiez en train de faire une "liste d'objets de voiture de 100 éléments", mais ce n'est pas le cas.

inputList[k]=new list <car> [k]; 

Je pense que cela crée un nouveau tableau d'éléments de k 'objets de la liste longue et qu'il attribue à l'élément k-ième « InputList ».

Tout-en-tout, utilisation très douteuse de pointeurs. Pardonnez-moi si j'ai mal jugé et, en fait, ils étaient intentionnels. Suivez les conseils des autres réponses pour éliminer l'utilisation de pointeurs.

Questions connexes