Хорошо, поэтому мне нужно создать трехмерную структуру данных во время выполнения, я решил использовать std :: vector, проблема заключается в следующем: я знаю измерение 1-го измерения во время создания экземпляра (когда я создаю объект, в котором я его использую), но я не знаю размер второго до времени выполнения, а размер 3-го измерения может варьироваться. Я создал трехмерный вектор , и время выполнения не жалуется, однако мне трудно присвоить значения элементам.
Этот код является частью объекта, который я создаю. В определении класса у меня есть:
std::vector< std::vector< std::vector<double> > > splits;
Затем в конструкторе объектов, чтобы создать / выделить первое измерение, я имею:
for(int i=0; i<sizeOfDimOne; i++){ //create 1st dimension
splits.push_back( std::vector< std::vector<double> >() );
}
на основе пользовательского ввода мне нужно создать 2-е измерение определенного размера, для этого я вызываю метод:
for(int i=0; i<sizeOfDimOne; i++){
for(int j=0; j<sizeOfDimTwo; j++) //create second dimension
splits[i].push_back( std::vector<double>() );
}
Однако, когда я получаю присвоение значений:
for(int i=0; i<sizeOfDimThree; i++){
splits[dim1][dim2].push_back( someValue ); //adding an element to the 3rd dim
}
( someValue постоянно изменяется (и является двойным), и вам не нужно беспокоиться о индексации нижних измерений, все проверяется.) Проблема в том, что когда я проверял разбиения [dim1] [dim2] [i] значение было 0.0 для (предположительно всех) записей, естественно, это не то, что было предоставлено someValue .
Я также попытался создать 3-е измерение, используя .resize (sizeOfDimThree) , а затем присвоить, используя
splits[dim1][dim2][i] = whatever;
но это не сработало совсем - объект / элемент не был создан вообще.
Я понимаю, что, возможно, это не самый простой способ сформулировать вопрос, но я считаю, что он наиболее точный, поскольку может быть несколько точек неудачи.