2017-06-16 106 views
0

我創建了一個名爲cosmic_ray_events的二維矢量。它有1234487行和9列。我想從所有行的每列中找出最大值。每當我嘗試運行我的代碼時,我都會收到分段錯誤,並且我記下了原因。我還通過加載來自dat文件的值創建了cosmic_ray_events向量。任何建議表示讚賞。在二維矢量的每列中查找最大值

vector<vector<double> > cosmic_ray_events(total_cosmic_ray_events, vector<double>(9,0)); 
ifstream cosmic_ray_data("events_comp-h4a_10.00-10000.00PeV_zen37.00.dat", ios::in); 

while(cosmic_ray_data.good())  
{ 
    for(int i = 0; i < 1233487; i++) //1233487 is the number of rows in the dat file 
    { 
     for(int j = 0; j < cosmic_columns; j++) 
     { 
       cosmic_ray_data >> cosmic_ray_events[i][j]; //reading in data for 2-D vector 
     } 
    } 
} 

double max[9]; 
std::vector<double> find_max; 
for(int i = 0; i < 1234487; i++) 
{ 
    for(int j = 0; j < 9; j++) 
    { 
     find_max.push_back(cosmic_ray_events[i][j]); 
     max[j] = *max_element(find_max.begin(), find_max.end()); 
     find_max.clear(); 
    } 
} 

回答

0

由於您使用std::vector,你可以做自己一個忙,在做每一個查找範圍檢查。這將防止段錯誤並返回一個可理解的錯誤消息。這樣做是這樣的:

vector<vector<double> > cosmic_ray_events(total_cosmic_ray_events, vector<double>(9,0)); 

ifstream cosmic_ray_data("events_comp-h4a_10.00-10000.00PeV_zen37.00.dat", ios::in); 

while(cosmic_ray_data.good()){ 
    for(int i = 0; i < 1233487; i++){ //1233487 is the number of rows in the dat file 
    for(int j = 0; j < cosmic_columns; j++){ 
     cosmic_ray_data >> cosmic_ray_events.at(i).at(j); //reading in data for 2-D vector 
    } 
    } 
} 

double max[9]; 
std::vector<double> find_max; 
for(int i = 0; i < 1234487; i++){ 
    for(int j = 0; j < 9; j++){ 
    find_max.push_back(cosmic_ray_events.at(i).at(j)); 
    max[j] = *max_element(find_max.begin(), find_max.end()); 
    find_max.clear(); 
    } 
} 

另外請注意,最後一組迴路引入一個單獨的元素放入find_max,發現的find_max(元素你只是按下)的最大元素,並保存,爲max[j]

我不認爲你的代碼做你認爲它的作用。你可能想要:

std::vector<double> max_vals(9,-std::numeric_limits<double>::infinity()); 
for(int i = 0; i < 1234487; i++){ 
    for(int j = 0; j < 9; j++){ 
    max_vals.at(j) = std::max(max_vals.at(j),cosmic_ray_events.at(i).at(j)); 
    } 
} 
+0

謝謝,我認爲最後一組循環最終會給我一個只包含9個元素的向量,每個元素是每列的最大值。我應該讓find_max成爲一個2D矢量嗎? –

+0

@michaelkovacevich:不,請參閱我編輯的答案。 – Richard