2016-07-29 8 views
-6

In cplusplus reference, Perhabs gibt es nicht {initial number of elements} -Konstruktor. Das Beispiel ist wie folgt.Hat std :: vector einen Konstruktor {Anfangszahl der Elemente}?

vector<string> svec { 5 }; 
cout << svec.capacity() << endl; // log is 5 

Aber es gibt explicit vector (size_type n); Konstruktor. In diesem Fall ist dies nicht { } Klammer. Was ist mit dieser Aussage passiert?

+1

Verwenden Sie bitte die [bessere Referenz] (http://en.cppreference.com/w/cpp/container/vector) bitte. –

+2

In Ihrem Link zeigt es, dass es einen Konstruktor gibt, der mit einem ganzzahligen Argument aufgerufen werden kann. Was ist das Problem? –

+0

Ich lese die Anleitung irgendwo, '{}' ist Initialisierungsliste. Aber in 'Vektor svec {5}; 'Fall, dies ist keine Initialisierungsliste, weil 'Werttyp'' String' ist. Also, wo ist der Konstruktor mit einem Integer-Argument? Es gibt '(ein Ganzzahlargument), das nur den Größentyp bedeutet. Es ist "() Klammer", nicht "{}' – fasdgoc

Antwort

0

Aber es gibt explizite Vektoren (size_type n); Konstrukteur. In diesem Fall ist dies nicht {} geschweifte Klammer. Was ist mit dieser Aussage passiert?

Uniform Initialisierung Syntax bedeutet, dass, vor allem, diese beiden sind die gleichen:

SomeType objectName(constructor_args); 
SomeType objectName{constructor_args}; 

Curly Klammern auch unter bestimmten Umständen verwendet werden kann, eine initialiser Liste, zu füllen, aber das ist hier nicht der Fall .

Sie rufen tatsächlich den zweiten Konstruktor auf, der die Anzahl der Elemente angibt, mit denen der Vektor beginnen soll.

Die C++ - Initialisierung ist ziemlich komplex, daher werde ich hier nicht näher darauf eingehen, sondern Sie dazu bringen, etwas über die verschiedenen Initialisierungssyntaxen zu lesen. Ihr C++ Buch sollte sie abdecken.