Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » std::vector als c-array, wo stehts ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.05.2005, 10:28 Uhr
stephanw
localhorst


Hi,

gibt es die Garantie, dass ein Vector zusammenhängend als Array speichert, wenn ja wo steht das ? Ich habs im Standard nicht gefunden, aber Josuttis schreibt, dass Folgendes gilt:

C++:
& v[i] == & v[0] + i



Vielen Dank
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.05.2005, 11:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


muss glaub ich nicht sein. Ich weiß nicht wie der Vektor mit seinem speicher umgeht.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.05.2005, 13:14 Uhr
RHBaum



Die meisten Impls unterstuetzen das, schon aus dem einfachen grund, das ein zugriff mittels [] operator nich langsamer sein sollte als bei nem herkoemmlichen array ....
Kenn momentan keine die es nicht so macht ... was aber nix heissen muss

Das wirklich gefaehrliche an der sache ist eigentlich:


C++:
vector<int> mvec(20,0);

int * mpvec = &mvec[0];
mvec.push_back(5);

// mpvec noch gueltig ? kann sein muss aber nich ....




Sprich, sobald an der groesse des arrays was aenderst ... kann dein zeiger ploetzlich in den Wald zeigen ... sich also wie richtige c-Arrays verhalten :-)

Ciao ...

Dieser Post wurde am 12.05.2005 um 13:16 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.05.2005, 13:25 Uhr
0xdeadbeef
Gott
(Operator)



Zitat von Punkt 23.2.4.1 des Standards:

A vector is a kind of sequence that supports random access iterators. In addition, it supports (amortized) constant time inserts and erase operations at the end; insert and erase in the middle can take linear time. storage management is handled automatically, though hints can be given to improve efficiency. The elements of a vector are stored contiguously, meaning that if v is a vector<T, Allocator> where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n <= v.size().


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.05.2005, 15:11 Uhr
stephanw
localhorst


@RHBaum: klar, nach Insert, Erase etc. muss das nihct mehr gültig sein.

@beefy: Prima, genau das habe ich gesucht. In dem von mir hört der Text unter 23.2.4.1. genau nach dem Wort "efficiency" auf, dann kommt 23.2.4.2... :-(
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 12.05.2005 um 15:12 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.05.2005, 15:16 Uhr
0xdeadbeef
Gott
(Operator)


Ich habs aus ANSI/ISO 14882:2003 entnommen. Der enthält ein paar Klarstellungen gegenüber dem Standard von 1998.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: