Standard-Konstruktion der Elemente in einem Vektor
-
22-08-2019 - |
Frage
Beim Lesen Sie die Antworten auf diese Frage ich habe einen Zweifel in Bezug auf die Standard-Konstruktion der Objekte im Vektor. Um es zu testen Ich schrieb den folgenden Testcode:
struct Test
{
int m_n;
Test();
Test(const Test& t);
Test& operator=(const Test& t);
};
Test::Test() : m_n(0)
{
}
Test::Test(const Test& t)
{
m_n = t.m_n;
}
Test& Test::operator =(const Test& t)
{
m_n = t.m_n;
return *this;
}
int main(int argc,char *argv[])
{
std::vector<Test> a(10);
for(int i = 0; i < a.size(); ++i)
{
cout<<a[i].m_n<<"\n";
}
return 0;
}
Und sicher genug, ist der Test structs Standardkonstruktor aufgerufen, während das Vektorobjekt zu schaffen. Aber was ich nicht in der Lage bin, ist zu verstehen, wie sich initialisieren die STL die Objekte ich einen Vektor von Basisdatentypen erstellen, wie Vektor von Ints da es Standardkonstruktors dafür? das heißt, wie sich alle ints in den Vektor haben einen Wert 0? sollte es nicht Müll sein?
Lösung
Es verwendet das Äquivalent des Standardkonstruktors für ints, die sie auf Null initialisiert werden. Sie können es explizit tun:
int n = int();
gesetzt n Null ist.
Beachten Sie, dass Standard-Konstruktion nur verwendet wird, und dann erforderlich, wenn der Vektor eine Anfangsgröße gegeben ist. Wenn Sie sagte:
vector <X> v;
Es gibt keine Anforderung, dass X einen Standardkonstruktor hat.
Andere Tipps
std::vector<Type> a(10); // T could be userdefined or basic data type
Vector ruft im Grunde default
für die Art, auf die sie verweist: Type()
- , wenn es grundlegende Datentypen wie int ist, Doppel gibt es dann int (), double () {int () erhalten Wert 0}
- , wenn der Benutzer definierte Datentyp dann Standardkonstruktors würde genannt werden.