У меня есть вектор, который будет иметь неизвестное количество строк и 3 столбца. Вектор должен быть сконструирован следующим образом: производится статистический тест, если он пропускает порог, вектор должен хранить информацию об этом. Что я делаю:Динамическое изменение размера и заполнение вектора векторов в C++
vector< vector <int> > validated_edge_list;
validated_edge_list.resize(1);
validated_edge_list.at(1).resize(3);
for(int i = 0; i < e ; i++)
{
p = gsl_cdf_hypergeometric_P(edge_list[i][2],
k_vec[edge_list[i][1]],
M-k_vec[edge_list[i][1]],
N_vec[edge_list[i][0]]); // n2_matrix[i][j] = M-k_matrix[i][j]
if (p <= bonferroni_lvl)
{
validated_edge_list[c][0] = edge_list[i][0];
validated_edge_list[c][1] = edge_list[i][1];
validated_edge_list[c][2] = edge_list[i][2];
c = c + 1;
validated_edge_list.resize(c+1);
validated_edge_list.at(c+1).resize(3);
}
}
Как вы можете видеть, я вручную добавлять новое сырец каждый раз. Это дает мне следующее сообщение об ошибке:
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check: __n (which is 1) >= this->size() (which is 1)
Aborted (core dumped)
Я могу предположить, что я делаю что-то неправильно, и я также думаю, что я должен использовать опцию push_back, но я не знаю, как.
Как это исправить? (Я новичок в C++.)
Пожалуйста, отредактируйте ваш вопрос, чтобы включить [mcve]. – YSC
'c = c + 1;' может быть сокращен до 'C++;' Вы также можете избежать двух '+ 1' s, переместив их вниз после 'resize()' и 'at()'. –