Instantiating a std :: Vektor von Boost :: Multi_Array .. Schmelzendes Gehirn für CPP Guru?
-
14-11-2019 - |
Frage
Ich denke, ich bin verwirrt mit instantierenden Objekten .. Nun .. Nicht ordnungsgemäß objekt, da new
-Anweisungen einen Kompilierfehler erstellen.Mein Hintergrund ist in Python und Java, und ich stecke vor C ++, um Objekte zu erstellen, die keine Klassen sind.
Ich übersetze einen Algorithmus aus C # und für Maschinenlernen und verwendet ein Array von mehrdimensionalen Arrays.
c # -Code: generasacodicetagpre.
Ich habe mich entschieden, die Boost-Bibliothek für das mehrdimensionale Array zu verwenden, und ich habe: generasacodicetagpre.
und ich erhalte diesen Laufzeitfehler:
hmm :: lernen >> vor
std :: bad_alloc 'Was (): std :: bad_allec
Lösung
The vectors have no space allocated (well it may be reserved already but you can't reference it with the array indexers). Change the lines:
epsilon[i] = matrix3D(boost::extents[T][states][symbols]);
gamma[i] = matrix2D(boost::extents[T][states]);
To:
epsilon.push_back(matrix3D(boost::extents[T][states][symbols]);
gamma.push_back(matrix2D(boost::extents[T][states]);
that should solve it. In your case since you know the array size you should reserve that much space in the vectors so that it reduces the reallocations needed:
epsilon.reserve(N);
gamma.reserve(N);