2013-05-17 27 views
0

我想知道是否有方法根據用戶的輸入創建不同的結構體。例如考慮這個代碼基於用戶輸入創建結構體

#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; 

    } 
} 

這裏用戶輸入一個數字。基於此,我想創建許多結構。但我無法做到這一點。請幫忙。 我意識到foo是字符串類型,我不能使用這個答案。

回答

1

你可能不要想要使用malloc如果你可以避免它(在這種情況下,你可以 - 很容易)。

相反,我會使用std::vector,這將使碼是這樣的:

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

這將分配向量(大致相同的陣列)gen不同rootset對象。你也可以用malloc來做到這一點,但是相比之下,它很笨拙和困難(如果你想讓它變得異常安全,那會變得更加笨拙和困難 - 直到你幾乎重新發明在完成之前,請使用std::vector)。

+0

好的。我現在已經指定了malloc裏面的數字。但是,以及用戶將指定。即使你認爲建議使用矢量? – Tuffy

+0

@BrownieTuffy:是的 - 除非您必須編寫與C編譯器兼容的代碼,否則幾乎不會使用'malloc'。 –

+0

確定。謝謝。 – Tuffy