PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] vector<> Zugriff klappt nicht


Nasenbaer
2007-02-13, 20:36:26
Hi,
kann mir jemand sagen warum ich hier ne out-of-range Exception bekomme?


vector< vector<int> > Matrix;

Matrix.reserve(20);
for(int i=0; < 20;++i)
{
Matrix[i].reserve(20);
}

Matrix.at(1).at(1) = 5;


Initialisiere ich hier was falsch?

Expandable
2007-02-13, 20:44:27
Du machst nix falsch. Bei mir wird eine Exception geworfen (Visual Studio 2005). Compiler/Debugger-Einstellungen falsch?

Verlesen, sorry.

Trap
2007-02-13, 20:52:41
Les nochmal nach was reserve macht und was resize macht :)

Nasenbaer
2007-02-13, 21:00:47
Les nochmal nach was reserve macht und was resize macht :)
Laut Header vom vector soll reserve Speicher für die Anzahl der Elemente reservieren. Das heißt dann wohl, dass zwar der Speicher reserviert wird aber ein Zugriff auf die Elemente nicht automatisch dadurch möglich wird, wenn ich deinen Kommentar richtig verstehe. :)
Im Buch "C++" steht dass allerdings auch nirgends so richtig drin. Ne zusätzlich Referenz wär vielleicht mal was.

Trap
2007-02-13, 21:41:54
http://www.cppreference.com/ ist da nicht schlecht (ok, zu dem Thema schon). Es gibt size() und capacity(), capacity ist ein implementierungsdetail und nur aus Performancegründen vorhanden, size ist das was angibt auf wieviele Elemente man zugreifen darf.

Besser ist "The C++ Standard Library - A Tutorial and Reference", ein wirklich ausführliches Buch zu allem was mit der Standardbibliothek zu tun hat.

Expandable
2007-02-13, 23:38:04
Trap, wie erklärst Du dann, dass bei ihm keine Exception geworfen wird und bei mir schon? Oder welches Verhalten hälst Du jetzt für richtig?

Verlesen, sorry.

Xmas
2007-02-13, 23:39:45
Nasenbaer schrieb doch, dass auch er eine Exception bekommt?

Coda
2007-02-14, 01:48:42
Exception ist bei std::vector::at auf jeden Fall richtig.

Expandable
2007-02-14, 10:18:46
Nasenbaer schrieb doch, dass auch er eine Exception bekommt?

lol... total verlesen... ich hab da "keine Exception" gelesen ;o) Ich nehm alles zurück :) Beim nächsten Mal genauer hinsehen... ;)