vector einlesen
-
Guten Abend,
ich habe eine kurze & schmerzlose Frage an euch.
Wie kann ich ein vector direkt initialisieren?Laut dem Buch "Der C++ Programmierer (2.Auflage)" geht das so:
vector<double> einVektor = {1.1, 2.2, 3.3, 4.4, 5.5};Das läuft aber nicht mit MS VStudio C++
Geht das nicht wie mit Arrays in C ?
double einVektor={1.1,2.2};
-
Klassenobjekte kann man meines Wissens nur mithilfe des Konstruktors initialisieren und std::vector bietet soweit ich weiß nur einen Konstruktor für die Größe des Vectors.
double einVektor[] ={1.1,2.2};Müsste es übrigens Lauten

-
Noobert schrieb:
vector<double> einVektor = {1.1, 2.2, 3.3, 4.4, 5.5};In C++11 ist das vollkommen legal. Kp wie, ob oder wann das MS unterstützen wird.
-
Noobert schrieb:
Guten Abend,
ich habe eine kurze & schmerzlose Frage an euch.
Wie kann ich ein vector direkt initialisieren?Laut dem Buch "Der C++ Programmierer (2.Auflage)" geht das so:
vector<double> einVektor = {1.1, 2.2, 3.3, 4.4, 5.5};Gibt's in dem Buch gar keinen Hinweis an der Stelle, dass diese Art der Initialisierung erst ab C++2011 funktioniert?
Ein Vektor bietet Dir aber zumindest einen Konstruktor, der zwei Iteratoren für eine Sequenz nimmt. Das lässt sich so ausnutzen:
template<class T, int N> inline T* anfang(T(&ar)[N]) {return ar;} template<class T, int N> inline T* ende(T(&ar)[N]) {return ar+N;} :: static const double dings[] = {1.1, 2.2}; vector<double> einVektor (anfang(dings),ende(dings));anfang und ende sind hier nur zwei Hilfsfunktionen für die Größenbestimmung. Du kannst das natürlich auch so schreiben:
vector<double> einVektor (dings+0,dings+2);wenn du weißt, dass es zwei Elemente sind.
-
das interessiert mich auch.
vector<double> einVektor = {1.1,2.2,3.3}geht bei mir auch nicht.
-
Wer lesen kann ist klar im Vorteil.
-
static const double dings[] = {1.1, 2.2, 3.3, 4.4, 5.5}; vector<double> einVektor (dings,dings+5);versteh ich noch nicht so recht.
einVektor(dings, dings+5) ... dabei steht dings doch als menge und dings+5 als double-wert.
was genau bedeutet das?
-
dings ist ein "rohes Array".
dings+0 ist die Adresse des ersten Elements
dings+4 ist die Adresse des letzten Elements
dings+5 ist die imaginäre Adresse des "Elements hinter dem letzten".dings[0]+5 ist 6.1

Stichwort: "array to pointer decay"
Verwendest Du einen Ausdruck, der sich auf ein Array bezieht, an einer Stelle, wo ein Zeiger hinkönnte, dann wird automatisch die Adresse des ersten Elements eingesetzt. Das + hier ist dann "Zeigerarithmetik".
Lustigerweise ist [] auch nicht auf Arrays sondern nur für Zeiger definiert und arr[index] ist in Wirklichkeit nur eine Abkürzung für *(arr+index) -- zumindest bei den "normalen" und keinen benutzerdefinierten Typen.