2013-05-17 4 views
0

Je voulais savoir s'il y avait un moyen de créer des structures différentes en fonction de l'entrée de l'utilisateur. Par exemple, considérons ce codecréer des structures basées sur l'entrée des utilisateurs

#include <iostream> 
#include <algorithm> 
#include <string> 
#include <iomanip> 
#include <limits> 
#include <stdio.h> 
#include <sstream> 


using namespace std; 
using std::stringstream; 
struct rootset { 
    double totSize; 
    const char *rStrtPtr; 
    const char *rEndPtr; 

    struct generations { 
    double totSize; 
    const char *genStrtPtr; 
    const char *genEndPtr; 
    int numOfGen; 
    string genName; 

    struct object { 
     double objSize; 
     const char *objStrtPtr; 
     const char *objEndPtr; 
     string id; 
     char markBit; 
     char objPtr; 


     struct freeList { 
    double freeSpace; 
    int flNumb; 
     }; 
    }; 
    } generation; 
}; 

int main() 
{ 

    int gen =0; 
    cin >> gen; 

    rootset* pRootSet = (rootset*)malloc(1200); 

    for(i=0; i<gen; i++) { 
    stringstream out; 
    out << i; 
    string s = out.str(); 
    string foo = "generation" + s; 
    rootset::generations foo; 

    } 
} 

Ici, l'utilisateur entre un nombre. Sur cette base, je voulais créer autant de structures. Mais je suis incapable de faire cela. S'il vous plaît aider. J'ai réalisé que foo est de type string et je ne peux pas utiliser cette réponse.

Répondre

1

Vous probablement ne pas voulez utiliser malloc si vous pouvez l'éviter (et dans ce cas vous pouvez - assez facilement à cela).

Au lieu de cela, j'utiliser std::vector, ce qui donnerait un code quelque chose comme:

int gen; 
if (cin >> gen) { 
    std::vector<rootset> rootsets(gen); 
    // code that uses `rootsets` goes here. 
} 

Cela affectera un vecteur (à peu près semblable à un tableau) de gen différents objets rootset. Vous pouvez le faire avec malloc, mais c'est difficile et difficile à comparer (et si vous essayez de faire en sorte que l'exception soit sûre, cela devient beaucoup plus maladroit et difficile - au point que vous êtes presque en train de réinventer std::vector avant que vous avez terminé).

+0

ok. Le nombre dans malloc que j'ai spécifié pour le moment. Mais cela aussi bien l'utilisateur va spécifier. Même si vous pensez qu'il est recommandé d'utiliser le vecteur? – Tuffy

+0

@BrownieTuffy: Oui - à moins que vous n'ayez à écrire du code compatible avec un compilateur C, vous ne voudrez presque jamais utiliser 'malloc'. –

+0

ok bien sûr. Je vous remercie. – Tuffy

Questions connexes