Я учитель в независимой школе-интернате и пытаюсь написать программу на C++, которая будет случайным образом размещать студентов за столами в нашем столовом зале, чтобы они сидели с разными учащимися и с разными сотрудниками каждый неделю. В идеале, за определенный период они не будут сидеть за одним и тем же столом дважды и с максимально возможным количеством разных учеников. Я создал эту программу на Python, и она отлично работает (ну, довольно хорошо). По разным причинам я пытаюсь перенести это на C++ (который я вообще не знаю), поэтому я могу передать его на посадку. Студенты и сотрудники (а также возможности таблиц) считываются из текстовых файлов. Я создал два пользовательских класса, один для студентов и один для таблиц, для обработки данных. Вот файлы заголовков два класса:Проблема с классом C++
Table.h
#pragma once
#include <iostream>
#include "Student.h"
#include <vector>
using namespace std;
class Table
{
// Private class variables
string staff;
int numSeats;
vector<Student> seating;
public:
Table(); // Default constructor
Table(string s, int n);
Table(const Table& that) : staff(that.staff), numSeats(that.numSeats)
{
}
// Copy Constructor
Table& operator=(const Table& that)
{
staff = that.staff;
numSeats = that.numSeats;
return *this;
}
int getNumSeats();
string getStaffName();
void addStudent(Student student);
void removeStudent(Student student);
void clearStudents();
vector<Student> getTableSeating();
int getRemainingSeats();
~Table(void);
};
Вот класс студент файл:
#pragma once
#include <iostream>
#include <vector>
using namespace std;
class Student
{
string name;
string country;
vector<int> tablesSatAt;
public:
Student(string n, string c);
Student();
Student(const Student& that) : name(that.name), country(that.country)
{
}
Student& operator=(const Student& that)
{
name = that.name;
country = that.country;
return *this;
}
string getName();
string getCountry();
void addTable(int tableNumber);
void removeTable(int tableNumber);
bool satAtTable(int tableNumber);
friend bool operator==(Student s1, Student s2);
friend bool operator!=(Student s1, Student s2);
~Student(void);
};
bool operator==(Student s1, Student s2);
bool operator!=(Student s1, Student s2);
Вот функция рекурсии, которая делает тяжелую работу:
bool seatRecursive(vector<Student> &tempStudents, vector<Table> &tempTables)
{
if (tempStudents.size() == 0) return true; //base case
Student nextStudent = randomSelect(tempStudents);
for (vector<int>::size_type i=0; i<tempTables.size(); i++)
{
if (tempTables[i].getRemainingSeats() > 0 && !nextStudent.satAtTable(i))
{
addStudentToTable(nextStudent, tempTables, i);
if (seatRecursive(tempStudents, tempTables)) return true;
else
{
removeStudentFromTable(nextStudent, tempTables, i);
tempStudents.push_back(nextStudent);
}
}
}
return false;
}
Большая часть этих работ. Когда я запускаю программу, я получаю текстовый файл с 10 неделями сидения, но все посадочные места для стола одинаковы. то есть, если я являюсь конкретным сотрудником, у меня есть те же дети, которые сидят за моим столом в течение всех 10 недель. У меня есть вектор ints, который должен хранить номера таблиц, которые студент сидел во времени. При отладке я замечаю, что эти номера таблиц НЕ хранятся в этом векторе, они всегда пусты. Моя проблема в том, что я не могу понять, почему это происходит. Это потому, что я передаю векторы по ссылке? Связано ли это с указателями, хотя я не декларирую явно указатели?
Любые предложения приветствуются, и при необходимости я могу вставить остальную часть кода.
Brian
священная стена текста, каков ваш вопрос? – wich
какой код называет seatRecursive? что внутри addStudentToTable? – Sergi0
@wich, он хочет знать, почему «таблица истории» ученика не хранится. Его отладка показывает, что его вектор 'vector tablesSatAt' не обновляется. –