2010-07-14 115 views
1

struct_genestruct_units。 我將所有Struck_gene的值讀取爲vector。 我如何分配指針struck_units.has_gene[i]指向struct_gene向量中的某個值,所以我沒有寫完整副本的stuckt_gene 然後讀取它。C++矢量指針陣列

我嘗試了一段時間,但沒能得到工作液

http://a.imageshack.us/img195/8607/001tfa.jpg

編輯 - 這裏是由Jakobud檢索代碼:

#include <iostream> 
#include <fstream> 
#include <vector> 
#include <time.h> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace std; 
struct struct_gene { 
    string name; 
    string description; 
}; 

struct struct_unit { 
    string name; 
    string surname; 
    int age; 
    int hunger; 
    int happines; 
    vector<struct_gene> *has_genes[12]; 
    struct_unit *maried_to; 
    struct_unit *father; 
    struct_unit *mother; 
}; 

int main() { 
    const int default_unit_count = 4; 
    fstream gene_list; 
    struct_gene * t_struct_gene; 
    t_struct_gene = new struct_gene; 
    gene_list.open("gene_list", ios::in); 
    vector<struct_gene> vector_gene; 
    //string name, description; 

    gene_list >> t_struct_gene->name; 
    getline(gene_list, t_struct_gene->description); 
    while (gene_list) { 
     vector_gene.push_back(*t_struct_gene); 
     gene_list >> t_struct_gene->name; 
     getline(gene_list, t_struct_gene->description); 
    } 
    delete t_struct_gene; 

// for (int i =0; i<vector_gene.size(); i++) { 
//  cout <<vector_gene[i].name <<" "<<vector_gene[i].description<<endl; 
// } 
    struct_unit *t_struct_unit; 
    t_struct_unit = new struct_unit; 

    srand (time(NULL)); 

    vector<struct_unit> vector_units; 

    for (int i=0; i<default_unit_count; i++) { 

     t_struct_unit->name = "unit_name"; 
     t_struct_unit->surname = "unit_surname"; 
     t_struct_unit->age = rand()%200; 
     t_struct_unit->hunger = rand()%70 +30; 
     t_struct_unit->happines = rand()%70 + 30; 
     for (int i=0; i<12; i++) { 
      t_struct_unit->has_genes[i] = vector_gene[rand()%vector_gene.size()]; 
     } 
     t_struct_unit->maried_to = NULL; 
     t_struct_unit->father = NULL; 
     t_struct_unit->mother = NULL; 
     vector_units.push_back(*t_struct_unit); 
    } 

    for (int i=0; i<vector_units.size(); i++) { 
     cout << vector_units[i].name <<" "<<vector_units[i].surname<<endl; 
     cout <<"Age:"<< vector_units[i].age <<" Hunger:"<<vector_units[i].hunger<<" Happines:"<<vector_units[i].happines<<endl; 
     for (int j=0; j<0; j++) { 
      cout <<vector_units[i].has_genes[j].name; 
     } 
     cout <<"==="<<endl; 
    } 
    delete t_struct_unit; 
} 
+3

不要發佈您的代碼爲圖像。現在沒有人可以使用它:( – Tom 2010-07-14 01:31:47

+3

請將您的代碼粘貼到問題中,有一個看起來像「101 010」的按鈕將其格式化爲代碼 – Cogwheel 2010-07-14 01:31:49

回答

0

試試這個;

1)實例struct_unit

struct_unit aunit; 

2)然後內部的循環設定在期望的位置(SOME_INDEX基因被你定義)

//inside loop 
vector_gene.push_back(*t_struct_gene); 
aunit.has_genes[SOME_INDEX] = *t_struct_gene; 
// 
+0

試過這樣做,並且它不工作 t_struct_unit- > has_genes [i] = * vector_gene [rand()%vector_gene.size()] – kurrata 2010-07-14 01:56:02

1

t_struct_unit->has_genes[i] = &vector_gene

這將將一個指向您的基因列表的指針分配到單位的i個插槽中。

但要小心,因爲vector_gene不是全局變量,所以它(及其所有內容)在函數返回後一段時間內會被填充垃圾。由於它位於main,這對您來說可能不是問題,但您應該瞭解堆棧和堆分配的區別。

此外,你確定你想每個struct_unit持有struct_gene s的載體的整個陣列?難道你不想讓每個人只持有12個基因,而不是12個基因的基因?

+0

現在它是主要的,因爲我正在檢查這個東西是如何工作的 對於後來我計劃離開所有載體main()和對他們做的操作認爲函數 – kurrata 2010-07-14 01:44:29

+0

試過這個「t_struct_unit-> has_genes [i] =&vector_gene [i]」,它沒有工作。 ; – kurrata 2010-07-14 01:53:27

+0

對不起,你只有一個基因載體,我的錯誤,編輯 – Borealid 2010-07-14 01:55:18

0

http://codepad.org/TZpNS59a

#include <iostream> 
#include <fstream> 
#include <vector> 
#include <time.h> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace std; 
struct struct_gene { 
    string name; 
    string description; 
}; 

struct struct_unit { 
    string name; 
    string surname; 
    int age; 
    int hunger; 
    int happines; 
    vector<struct_gene> *has_genes[12]; 
    struct_unit *maried_to; 
    struct_unit *father; 
    struct_unit *mother; 
}; 

int main() { 
    const int default_unit_count = 4; 
    fstream gene_list; 
    struct_gene * t_struct_gene; 
    t_struct_gene = new struct_gene; 
    gene_list.open("gene_list", ios::in); 
    vector<struct_gene> vector_gene; 
    //string name, description; 

    gene_list >> t_struct_gene->name; 
    getline(gene_list, t_struct_gene->description); 
    while (gene_list) { 
     vector_gene.push_back(*t_struct_gene); 
     gene_list >> t_struct_gene->name; 
     getline(gene_list, t_struct_gene->description); 
    } 
    delete t_struct_gene; 

// for (int i =0; i<vector_gene.size(); i++) { 
//  cout <<vector_gene[i].name <<" "<<vector_gene[i].description<<endl; 
// } 
    struct_unit *t_struct_unit; 
    t_struct_unit = new struct_unit; 

    srand (time(NULL)); 

    vector<struct_unit> vector_units; 

    for (int i=0; i<default_unit_count; i++) { 

     t_struct_unit->name = "unit_name"; 
     t_struct_unit->surname = "unit_surname"; 
     t_struct_unit->age = rand()%200; 
     t_struct_unit->hunger = rand()%70 +30; 
     t_struct_unit->happines = rand()%70 + 30; 
     for (int i=0; i<12; i++) { 
      t_struct_unit->has_genes[i] = vector_gene[rand()%vector_gene.size()]; 
     } 
     t_struct_unit->maried_to = NULL; 
     t_struct_unit->father = NULL; 
     t_struct_unit->mother = NULL; 
     vector_units.push_back(*t_struct_unit); 
    } 

    for (int i=0; i<vector_units.size(); i++) { 
     cout << vector_units[i].name <<" "<<vector_units[i].surname<<endl; 
     cout <<"Age:"<< vector_units[i].age <<" Hunger:"<<vector_units[i].hunger<<" Happines:"<<vector_units[i].happines<<endl; 
     for (int j=0; j<0; j++) { 
      cout <<vector_units[i].has_genes[j].name; 
     } 
     cout <<"==="<<endl; 
    } 
    delete t_struct_unit; 
} 
+0

第62行是我試圖寫指向stuct_gene向量的地方 – kurrata 2010-07-14 01:48:32

0

這裏是他的代碼:

#include <iostream> 
#include <fstream> 
#include <vector> 
#include <time.h> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace std; 
struct struct_gene { 
    string name; 
    string description; 
}; 

struct struct_unit { 
    string name; 
    string surname; 
    int age; 
    int hunger; 
    int happines; 
    vector<struct_gene> *has_genes[12]; 
    struct_unit *maried_to; 
    struct_unit *father; 
    struct_unit *mother; 
}; 

int main() { 
    const int default_unit_count = 4; 
    fstream gene_list; 
    struct_gene * t_struct_gene; 
    t_struct_gene = new struct_gene; 
    gene_list.open("gene_list", ios::in); 
    vector<struct_gene> vector_gene; 
    //string name, description; 

    gene_list >> t_struct_gene->name; 
    getline(gene_list, t_struct_gene->description); 
    while (gene_list) { 
     vector_gene.push_back(*t_struct_gene); 
     gene_list >> t_struct_gene->name; 
     getline(gene_list, t_struct_gene->description); 
    } 
    delete t_struct_gene; 

// for (int i =0; i<vector_gene.size(); i++) { 
//  cout <<vector_gene[i].name <<" "<<vector_gene[i].description<<endl; 
// } 
    struct_unit *t_struct_unit; 
    t_struct_unit = new struct_unit; 

    srand (time(NULL)); 

    vector<struct_unit> vector_units; 

    for (int i=0; i<default_unit_count; i++) { 

     t_struct_unit->name = "unit_name"; 
     t_struct_unit->surname = "unit_surname"; 
     t_struct_unit->age = rand()%200; 
     t_struct_unit->hunger = rand()%70 +30; 
     t_struct_unit->happines = rand()%70 + 30; 
     for (int i=0; i<12; i++) { 
      t_struct_unit->has_genes[i] = vector_gene[rand()%vector_gene.size()]; 
     } 
     t_struct_unit->maried_to = NULL; 
     t_struct_unit->father = NULL; 
     t_struct_unit->mother = NULL; 
     vector_units.push_back(*t_struct_unit); 
    } 

    for (int i=0; i<vector_units.size(); i++) { 
     cout << vector_units[i].name <<" "<<vector_units[i].surname<<endl; 
     cout <<"Age:"<< vector_units[i].age <<" Hunger:"<<vector_units[i].hunger<<" Happines:"<<vector_units[i].happines<<endl; 
     for (int j=0; j<0; j++) { 
      cout <<vector_units[i].has_genes[j].name; 
     } 
     cout <<"==="<<endl; 
    } 
    delete t_struct_unit; 
}