2009-05-18 12 views
6

Beim Lesen der Antworten auf diese question bekam ich einen Zweifel bezüglich der Standard-Konstruktion der Objekte im Vektor. Um es zu testen, schrieb ich den folgenden Testcode:Standard-Konstruktion von Elementen in einem Vektor

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 tatsächlich wird der Standardkonstruktor der Teststrukturen beim Erstellen des Vektorobjekts aufgerufen. Aber was ich nicht verstehen kann, ist, wie die STL die Objekte initialisiert, die ich einen Vektor des grundlegenden Datentyps wie Vektor von Ints verursache, da es Standardkonstruktor dafür gibt? h. wie haben alle Eingänge im Vektor den Wert 0? sollte es nicht Müll sein?

Antwort

10

Es verwendet das Äquivalent des Standardkonstruktors für ints, die auf Null gesetzt werden soll. Sie können dies explizit tun:

int n = int(); 

wird n auf Null gesetzt.

Beachten Sie, dass die Standardkonstruktion nur verwendet und benötigt wird, wenn der Vektor eine anfängliche Größe erhält. Wenn Sie sagten:

vector <X> v; 

gibt es keine Anforderung, dass X einen Standardkonstruktor haben.

+0

Wir scheinen viel Zeit an den Händen zu haben, heute :) – xtofl

+0

, dass die Freude der Rezession ist :-( –

+0

ich nicht kannte .. Nun, was nennen wir int(), wie? Dann wieder, warum nicht Wir haben Standardinitialisierer für Basisdatentypen – Canopus

1
std::vector<Type> a(10);  // T could be userdefined or basic data type 

Vektor ruft im Grunde default für die Art, auf die er zeigt: Type()

  • wenn es grundlegende Datentyp wie int ist, Doppel gibt es dann int(), double() {int () erhält den Wert 0}
  • Wenn der benutzerdefinierte Datentyp dann Standardkonstruktor würde aufgerufen werden.
Verwandte Themen