Wie wir initialisieren std::vector in einer Klasse-Konstruktor in C++?
Wie wir initialisieren std::vector in einer Klasse-Konstruktor in c++?
class MyClass
{
public:
MyClass( int p_Var1, int* p_Vector ) : Var1( p_Var1 ) //, Initialize std::vector - MyVector with p_Vector
{
};
~MyClass( void );
private:
int Var1;
std::vector< int > MyVector;
};
Ich welche Weise, wollen Sie initialisieren Ihre
Es hängt davon ab. Was meinst du mit "initialisieren"? Gegen welche version von C++ - standard sind Sie mit der Arbeit?
Garcia mit int* p_Vector
Wenn Sie kopieren möchten
std::vector
? (Welche spezifischen form der Konstruktoren, die Sie verwenden möchten?)Es hängt davon ab. Was meinst du mit "initialisieren"? Gegen welche version von C++ - standard sind Sie mit der Arbeit?
Garcia mit int* p_Vector
Wenn Sie kopieren möchten
p_Vector
verwenden Sie einfach vector
's copy-Konstruktor ) : myVector(*p_Vector)
p_Vector
ist nicht ein Zeiger auf einen Vektor, sondern einen Zeiger auf das erste element eines C-Stil-array. (Ich nehme an.) : myVector( *p_Vector )
erstellt einen Vektor, dessen Größe wird bestimmt, indem die erste int
im array mit 0 initialisiert.InformationsquelleAutor CLearner | 2013-02-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst
myVector
initialisiert wird, selbst wenn Sie nichts tun,da es nicht-triviale Konstruktoren. Wenn Sie wollen
initialisiert wird es gegeben sein, die einen Zeiger auf eine Folge von
int
werden Sieauch zu wissen, die Länge. Wenn Sie sowohl einen Zeiger und
die Länge, die Sie tun können:
Alternativ (und mehr idiomatically), Sie lasse die Anrufer tun
die Ergänzung, und den Konstruktor nehmen Sie zwei Zeiger,
ein Beginn und ein Ende:
(Wenn der Anrufer ist mit C++11, kann er diese aus
ein C-Stil-array mit
std::begin()
undstd::end()
.)EDIT:
Nur um es ganz klar: nur ein
int*
nicht bietengenug Informationen, etwas zu tun. Ein
int*
Punkte dererste element eines C-Stil-array; Sie müssen auch einige Weg,
Feststellung am Ende: ein element zählen, ein Ende der Zeiger, etc. In
besonderen Fällen andere Techniken können verwendet werden; D. H. wenn die C-Stil
array enthält nur nicht-negative zahlen, die Sie nutzen könnten
-1
alsein sentinal, und so etwas wie
: myVector( pVector, std::find(
. Dies sind Besondere Fälle, jedoch.pVector, NULL, -1 ) )
Nicht sicher, was genau es sein sollte. Formal ist ein nicht-trivialer Konstruktor, der aufgerufen werden kann, mit der gegebenen Argumente (oder einen nicht-trivialen Standardkonstruktor, wenn keine Initialisierung angegeben ist). Praktisch gibt es jedoch nicht-triviale Konstruktoren, die nicht initialisieren Sie die Daten der Mitglieder, einschließlich der compiler-generierte (z.B. wenn die Klasse über virtuelle Funktionen). Während also der standard könnte ein Mitglied "initialisiert", es wäre nicht initialisiert werden, indem jeder vernünftigen Bedeutung des Wortes. (Aber
vector
hat ein user ctor definiert, die das richtige tut.)InformationsquelleAutor James Kanze