stl-Vektor und c++: wie .Größe ohne default-Konstruktor?
Wie kann ich sagen, STL, speziell für die Methode resize()
im Vektor zur Initialisierung von Objekten mit einem Konstruktor, andere als Standard, und mit welchen Parametern?
Beispiel:
class something {
int a;
something (int value);
}
std::vector<something> many_things;
many_things.resize (20);
Generell, wie kann ich die Kraft, die STL zu verwenden, mein Konstruktor, wenn es braucht, um Objekte zu erstellen, und die Parameter übergeben, die Konstruktor?
In meinem Fall hinzufügen eines default-Konstruktor ist nicht eine option, und das würde ich lieber nicht verwenden, um ein array von Zeigern, das problem zu lösen.
InformationsquelleAutor conejoroy | 2009-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die 2-argument überladen:
many_things.resize(20, something(5));
InformationsquelleAutor MSalters
Ich denken kann eine Lösung, aber iwarn Sie, es ist ziemlich hässlich. Ich weiß nicht, warum Sie nicht wollen, fügen Sie eine default-Konstruktor, aber wenn Sie nur wollen, um zu verhindern, dass Benutzer der Klasse zu erstellen unintialized Instanzen, Sie können machen nur die Standard-Konstruktor private und deklarieren Sie die entsprechende Vektor-Klasse einen Freund :
Das ist hässlich, aus mehreren Gründen, vor allem, weil es funktioniert nur für einen container-Typ. Es gibt keinen anderen Weg, weil STL-Containern benötigen lediglich Ihre Elemente werden standardmäßig baubar.
std::vector<Foo>
Delegierten Bau zu einer anderen Klasse und damit die Freundschaft unbrauchbar. Siehe hierVielen Dank für das update! Ich denke, das ist, was Sie erhalten, für die je nach Implementierung-details. 3.5-Jahre-vor-mich war nicht so erfahren 🙂
Leben und lernen 😉
InformationsquelleAutor Björn Pollex
Könnten Sie
reserve()
um die Puffergröße zu erhöhen und manuell hinzufügen (push_back()
) die erforderlichen Elemente in einer Schleife.resize
.verwenden emplace_back (en.cppreference.com/w/cpp/container/vector/emplace_back) kann eine bessere option sein. es spielt keine Objekte kopieren.
InformationsquelleAutor sharptooth
Mit Spezialisierung gleichermaßen diese (sorry, ich schrieb dies mit nur minimalen Kontrollen)?
Aber denke, wenn Sie es wirklich brauchen. Warum nicht zum erstellen von Standard-Konstruktor statt?
InformationsquelleAutor Roman Nikitchenko