我在爲大學寫一個程序。該計劃的目標是爲醫院制定護士時間表。不過,我現在很困難。您可以在下面找到該程序的一個功能。矢量不能被覆蓋
該函數的輸入是一個名冊,它由每位護士每天必須執行的班次組成。在這個例子中,我們有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