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?

War es hilfreich?

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.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top