2010-07-14 2 views
1

есть struct_gene и struct_units. i все данные Struck_gene значениями vector. Как назначить указатель для struck_units.has_gene[i], чтобы указать на какое-то значение в struct_gene вектор, поэтому мне не нужно писать полную копию stuckt_gene И после этого прочитайте.C++ векторная указательная матрица

Я пытался некоторое время, но не удалось получить рабочий раствор

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

Edit - Вот код, как извлекается 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

Dont разместим ваш код как изображение. Теперь никто не может его использовать :( – Tom

+3

Пожалуйста, вставьте свой код в вопрос. Для его форматирования это код, который выглядит как «101 010». – Cogwheel

ответ

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

1

t_struct_unit->has_genes[i] = &vector_gene

Это будет назначьте указатель на список ваших генов в ячейку i.

Но будьте осторожны, поскольку vector_gene не является глобальной переменной, он (и все его содержимое) будет заполнен мусором через некоторое время после функции, в которой он возвращается. Поскольку он находится в main, это, вероятно, не проблема для вас, но вы должны знать о различии между распределениями стека и кучи.

Кроме того, вы уверены, что хотите, чтобы каждый struct_unit держал целый массив векторов struct_gene s? Разве вы не хотите, чтобы у каждого было всего двенадцать генов, а не 12 векторов генов?

+0

Прямо сейчас это в основном, потому что я проверяю, как это работает. Для более поздних я планирую оставить все векторы в main() и делать операции с ними мыслительные функции – kurrata

+0

пробовал этот «t_struct_unit-> has_genes [i] = & vector_gene [i]», и он не работал. t_struct_unit-> has_genes [i] = & vector_gene [rand()% vector_gene.size()] – kurrata

+0

Извините, у вас есть только один вектор-ген. Моя ошибка. Отредактировано. – Borealid

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 vector – kurrata

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; 
} 
Смежные вопросы