我在为大学写一个程序。该计划的目标是为医院制定护士时间表。不过,我现在很困难。您可以在下面找到该程序的一个功能。矢量不能被覆盖
该函数的输入是一个名册,它由每位护士每天必须执行的班次组成。在这个例子中,我们有32行(32护士)和28列(代表28天)。每个单元格包含一个从0到6的数字,表示一天休息(0)或某个班次(1到6)。
该函数应计算每一天,有多少护士安排了某个班次。例如,第一天有8名护士进行班次2,6班次3等等。该函数的输出是双向量。
我认为这个函数大部分是正确的,但是当我将它称为不同的花名册时,程序总是给出第一个花名册。
void calculate_nbr_nurses_per_shift(vector<vector<int>> roster1)
{
for (int i = 0; i < get_nbr_days(); i++)
{
vector<int> nurses_per_shift;
int nbr_nurses_free = 0;
int nbr_nurses_shift1 = 0;
int nbr_nurses_shift2 = 0;
int nbr_nurses_shift3 = 0;
int nbr_nurses_shift4 = 0;
int nbr_nurses_shift5 = 0;
int nbr_nurses_shift6 = 0;
for (int j = 0; j < get_nbr_nurses(); j++)
{
if (roster1[j][i] == 0)
nbr_nurses_free += 1;
if (roster1[j][i] == 1)
nbr_nurses_shift1 += 1;
if (roster1[j][i] == 2)
nbr_nurses_shift2 += 1;
if (roster1[j][i] == 3)
nbr_nurses_shift3 += 1;
if (roster1[j][i] == 4)
nbr_nurses_shift4 += 1;
if (roster1[j][i] == 5)
nbr_nurses_shift5 += 1;
if (roster1[j][i] == 6)
nbr_nurses_shift6 += 1;
}
nurses_per_shift.push_back(nbr_nurses_shift1);
nurses_per_shift.push_back(nbr_nurses_shift2);
nurses_per_shift.push_back(nbr_nurses_shift3);
nurses_per_shift.push_back(nbr_nurses_shift4);
nurses_per_shift.push_back(nbr_nurses_shift5);
nurses_per_shift.push_back(nbr_nurses_shift6);
nurses_per_shift.push_back(nbr_nurses_free);
nbr_nurses_per_shift_per_day.push_back(nurses_per_shift);
}
}
在这里你可以看到程序: Get_shift_assignment()和schedule_LD是其他名单。你需要充分了解这个问题
void test_schedule_function()
{
calculate_nbr_nurses_per_shift(schedule_LD);
calculate_nbr_nurses_per_shift(get_shift_assignment());
calculate_coverage_deficit();
}
还有一个功能是这一个:
void calculate_coverage_deficit()
{
int deficit = 0;
for (int i = 0; i < get_nbr_days(); i++)
{
vector<int> deficit_day;
for (int j = 0; j < get_nbr_shifts(); j++)
{
deficit = get_staffing_requirements()[j] - nbr_nurses_per_shift_per_day[i][j];
deficit_day.push_back(deficit);
}
nurses_deficit.push_back(deficit_day);
}
cout << "Day 1, shift 1: there is a deficit of " << nurses_deficit[0][0] << " nurses." << endl;
cout << "Day 1, shift 2: there is a deficit of " << nurses_deficit[0][1] << " nurses." << endl;
cout << "Day 1, shift 3: there is a deficit of " << nurses_deficit[0][2] << " nurses." << endl;
cout << "Day 1, shift 4: there is a deficit of " << nurses_deficit[0][3] << " nurses." << endl;
}
所以问题是,每个我运行这个程序的时候它总是给我的第一名单中的赤字。在这种情况下,这是Schedule_LD。当我第一次运行带有输入名字get_shift_assignment()的函数时,他给我的名单上的赤字。 第二次运行函数时,nbr_nurses_per_shift_per_day [] []向量不会被覆盖,我不知道如何解决这个问题......任何帮助将不胜感激。
小记:在无效calculate_nbr_nurses_per_shift(矢量> roster1),你应该通过roster1作为一个const&,而不是按值传递。 –
RichardPlunkett
您似乎在代码中使用了很多全局变量。我的假设是,你需要使用矢量 调用函数之前需要'clear'一个或一个以上的载体(例如:'nurses_per_shift.clear()''前calculate_nbr_nurses_per_shift') – user1781290
你通话之间结算calculate_nbr_nurses_per_shift,或者你应该在calculate_nbr_nurses_per_shift中清除它? 你说,它没有收到过书面的功能就是推动所有的数据到一个稳步增长的矢量结束。 – RichardPlunkett