Vektoren in Arrays ablegen, Anzahl begrenzt?
-
Hallo,
ich habe folgenden Code:
vector<int> v[180];
Jetzt füge ich z.b. v[0] 10 Vektoren zu
v[1] 8 Vektoren usw...Sobald ich bei v[131] (insgesamt schon ca. 1000 Vektoren vergeben) ankomme, liefert mein Programm falsche Werte, obwohl es nur die ersten drei also v[0], v[1], v[2] für die Berechnung verwendet.
Ich vermute das vielleicht die Größe limitiert ist und irgendetwas überschrieben wird?
v[169].reserve(1500); Habe ich auch schon ohne Erfolg versucht.
-
NaHibi schrieb:
vector<int> v[180];
Jetzt füge ich z.b. v[0] 10 Vektoren zu
v[1] 8 Vektoren usw...Du kannst v[0] keine Vektoren zuweisen, nur integer, denn v[0] ist ein vector<int>.
-
[s].... Nein?
Er spricht von vector<int> v**[n]**. Das ist ein Array von Vectoren. Und da kann man v[0] auch Vectoren hinzufügen. v[x][y] sind Integer...[/s]
Wer lesen kann und dabei auch noch versteht was er liest ist klar im Vorteil...

-
NaHibi schrieb:
Hallo,
ich habe folgenden Code:
vector<int> v[180];
Jetzt füge ich z.b. v[0] 10 Vektoren zu
v[1] 8 Vektoren usw...Sobald ich bei v[131] (insgesamt schon ca. 1000 Vektoren vergeben) ankomme, liefert mein Programm falsche Werte, obwohl es nur die ersten drei also v[0], v[1], v[2] für die Berechnung verwendet.
Ich vermute das vielleicht die Größe limitiert ist und irgendetwas überschrieben wird?
v[169].reserve(1500); Habe ich auch schon ohne Erfolg versucht.
Wenn du zu wenig Speicher hast, dann wird std::bad_alloc fliegen, aber es werden nicht einfach so Werte überschrieben.
Aber deine Erklärung reicht nicht für eine Diagnose. Zeig mal mehr Code und versuch vorher den Fehler auf ein minimales Beispielprogramm runter zu brechen.
-
Warum benutzt du nicht std::array( oder boost::array ) ?
std::array< std::vector<int>, 180 > iarray;
-
v[0].push_back(49);
v[0].push_back(52);
v[0].push_back(51);
v[0].push_back(52);
v[0].push_back(50);
v[0].push_back(52);
v[0].push_back(51);
v[0].push_back(49);
v[0].push_back(50);
v[0].push_back(49);
v[0].push_back(50);
v[0].push_back(51);v[1].push_back(48);
v[1].push_back(52);
v[1].push_back(45);
v[1].push_back(49);
v[1].push_back(47);
v[1].push_back(51);
v[1].push_back(46);
v[1].push_back(50);v[2].push_back(44);
v[2].push_back(52);
v[2].push_back(41);
v[2].push_back(49);
v[2].push_back(43);
v[2].push_back(51);
v[2].push_back(42);
v[2].push_back(50);v[3].push_back(40);
v[3].push_back(52);
v[3].push_back(37);
v[3].push_back(49);
v[3].push_back(39);
v[3].push_back(51);
v[3].push_back(38);
v[3].push_back(50);v[4].push_back(36);
v[4].push_back(52);
v[4].push_back(33);
v[4].push_back(49);
v[4].push_back(35);
v[4].push_back(51);
v[4].push_back(34);
v[4].push_back(50);...
Es funktioniert alles wunderbar bis ich bei [131] ankomme, dann fängt das Programm an zu spinnen.
Wie gesagt ich verwende vorerst nur die Werte von v[0], v[1] und v[2].
Lösche ich v[131] passt wieder alles.v[131].push_back(9);
v[131].push_back(48);
v[131].push_back(11);
v[131].push_back(48);
v[131].push_back(10);
v[131].push_back(48);
v[131].push_back(12);
v[131].push_back(45);
v[131].push_back(11);
v[131].push_back(45);
v[131].push_back(10);
v[131].push_back(45);
v[131].push_back(12);
v[131].push_back(47);
v[131].push_back(9);
v[131].push_back(47);
v[131].push_back(10);
v[131].push_back(47);
v[131].push_back(12);
v[131].push_back(46);
v[131].push_back(9);
v[131].push_back(46);
v[131].push_back(11);
v[131].push_back(46);
-
BAU EIN KLEINES PROGRAMM, DAS DEN FEHLER AUCH ZEIGT.
-
Skym0sh0 schrieb:
.... Nein?
Er spricht von vector<int> v**[n]**. Das ist ein Array von Vectoren. Und da kann man v[0] auch Vectoren hinzufügen. v[x][y] sind Integer...
Ja, genau. Und deshalb kann ich auch v[0] keine vectoren zufügen. v[0] IST ein vector<int>, dem kann ich keine 10 vector<int> hinzufügen, sehrwohl aber 10 ints, und es ist genau das was er macht. War also eine fehlerhafte Beschreibung des Problems.
-
Da wird vermutlich irgendwo anders der Wurm drin sein. Wenn dein Programm nur aus dem Füllen der Vektoren bestünde, könntest du ja wohl kaum falsche Ergebnisse beobachten. Der Fehler steckt in dem Rest.