2010-07-14 329 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; 
}