我正在處理一個向量,它是我的代碼的最終輸出。我發現的是,我將它傳遞給一個函數之前和之後,矢量大小是不同的,即使我沒有添加任何元素。我通過引用傳遞向量。有問題的功能是NM_sim,我無法調試爲什麼會發生這種情況。感謝您的時間和幫助!我將它傳遞給函數NM_sim之前和之後跟蹤矢量的大小。在調用NM_sim之後,矢量的大小會發生變化。這裏是我的代碼部分:傳遞給函數後的矢量更改大小
爲state_type被描述爲標準::向量
random_select(gene_ind, n_ka_temp, n_kd_temp, kavec_pert, kdvec_pert, kaval_pert, kdval_pert);
state_type param_pert;
param_pert.push_back(param[0]);
param_pert.push_back(param[1]);
param_pert.push_back(param[2]);
param_pert.insert(param_pert.end(),kaval_pert.begin(),kaval_pert.end());
param_pert.insert(param_pert.end(),kdval_pert.begin(),kdval_pert.end());
transform(param_pert.begin(),param_pert.end(),param_pert.begin(),powof10());
cout << "########## Value of param size is: " << param.size() << " ################" << endl;
MC_sim (x_d, t_d, mean_xd, fex_nm, jex_nm, gene_ind, n_ka_temp, n_kd_temp, error_pert, param_pert);
for (int i = 0; i < param.size(); i++)cout << "########## Value of param from MC is: " << param[i] << " ################" << endl;
cout << "########## Value of param size is: " << param.size() << " ################" << endl;
cout << "The optimized value of error from MC calculation is: " << error_pert << endl;
NM_sim(x_d, t_d, mean_xd, fex_nm, jex_nm, gene_ind, n_ka_temp, n_kd_temp, error_pert, param_pert);
cout << "The optimized value of error from NM calculation is: " << error_pert << endl;
內NM_sim:
void NM_sim(const state_type &x_d, const state_type &t_d, const state_type &mean_xd, myFex_single &fex_nm, myJex_single &jex_nm, const int &gene_ind, const int nka, const int nkd, double &error_ode, state_type ¶m)
{
const int param_size = 3 + nka + nkd;
cout << "########## Value of error from MC is: " << error_ode << " ################" << endl;
cout << "########## Value of param size is: " << param.size() << " ################" << endl;
for (int i = 0; i < param.size(); i++)cout << "########## Value of param from MC is: " << param[i] << " ################" << endl;
....
}
我得到的輸出是:
########## Value of param from MC is: 0.789519 ################
########## Value of param from MC is: -0.47315 ################
########## Value of param from MC is: -0.693194 ################
########## Value of param from MC is: 0.368322 ################
########## Value of param from MC is: 0.298118 ################
########## Value of param from MC is: 0.883191 ################
########## Value of param size is: 6 ################
The optimized value of error from MC calculation is: 0.000329494
########## Value of error from MC is: 0.000329494 ################
########## Value of param size is: 13 ################
########## Value of param from MC is: 0.789519 ################
########## Value of param from MC is: -0.47315 ################
########## Value of param from MC is: -0.693194 ################
########## Value of param from MC is: 0.368322 ################
########## Value of param from MC is: 0.298118 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0.883191 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0 ################
的在將其傳遞給NM_sim後,矢量大小從MC_sim後的6變爲13。任何關於如何解決它的想法或意見,我們感激不盡!謝謝!
將該向量作爲'const'引用傳遞,並且該bug可能會變得很明顯。 (在你沒有顯示的代碼中,最有可能調用'operator []'的值過高,從而在向量中創建一個新元素。) –