Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » std::vector + ifstream.read

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
25.12.2006, 23:53 Uhr
Drager



Hallo,

ich hab mal ne frage zu stl vector und der funktion read...

also ich dachte bisher immer , dass stl vector das gleiche ist wie ein array, nur mit noch ein paar funktionen... darum hab ich das bis jetzt auch genaus benutzt..

sprich ich gehe davon aus, dass der speicher immer an einem stück ist...
nun meinte ein freund von mir, ich könne davon nicht ausgehn. da dies nicht in der spezifikation festgelegt sei, also mit nem anderen compiler schief gehn könnte.

also hab ich mal die stl beschreibung auf der homepage von sgi durchstöbert. hab aber keine echte antwort gefunden, zwar steht da oft : "linear oder aligned objects" aber ob der speicher wirklich am stück ist weiss ich nu auch net...

ich will nämlich folgendes machen:



C++:
std::vector<Object> temp1(size - 1);

load.read((char*)&temp1[0],sizeof(Object) * (size - 1));



so das funktioniert zur zeit wunderbar, wäre es aber so wie mein freund behauptet, könnte das zu problemen führen... da der speicher ja nicht am stück gegeben sein muss....
(sondern vielleicht nur immer ein paar am stück und dann verkettet etc. etc.)
ich nämlich keine lust, wie ich finde sinnloserweise lauter "push_backs" zu machen, obwohl ich weiss, dass ich jetzt einen speicher am stück beschreiben kann...

also weiss einer 100% wie das nun ist??

und dann hab ich heute was über "stl-valarrays" gelesen, geht das vielleicht damit??

sonst muss ich mir ja ne vector klasse schreiben, die den speicher am stück reserviert und die funktionalität von den std::vectoren hat...

danke

Drager
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.12.2006, 00:30 Uhr
Drager



ok hab nun folgendes gefunden:




Zitat:

Breaking news at press time: On Friday, October 27, 2000 at the conclusion of the Toronto meeting, the C++ standards committee approved two important milestones:

1. Approved the contents of the C++ Standard's first Technical Corrigendum (TC). The vote passed unanimously, and this material will become the first official update to the ISO/ANSI C++ Standard pending only a few more months of grinding through the routine publication mechanics and paperwork that the standards bodies require.

One of the interesting changes in the TC is that the standard will now guarantee that vector storage is contiguous (except of course for the specialization vector<bool> ), where "contiguous" means to be stored in the same way as a C-style array; see Figure 3. One reason that it's important that vector be stored contiguously is so that it can be used easily as a complete drop-in replacement for C-style arrays, even when calling legacy facilities designed to operate on plain arrays; for more details, see my July/August 1999 column in C++ Report.[7] If you're wondering why vector<bool> would get a seemingly surprising exception from this rule, see also my May 1999 column in C++ Report for the scoop on that juicy little eccentricity.



von www.gotw.ca/publications/mill14.htm#2

aber finde keine offizielle quelle..
naja ich glaub das jetzt erstmal , dass es an einem stück ist...

Drager

Dieser Post wurde am 26.12.2006 um 00:33 Uhr von Drager editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.12.2006, 00:53 Uhr
~MartinF
Gast


Hallo zusammen,

um ein STL-Container mit Werten aus einem Stream (egal ob Stringstream, Filestream o.Ä.) zu füllen kannst du ebenfalls auf die Funktionalität der Standardbibliothek zurückgreifen. Die Funktionen der Headerdatei algorithm.h dürften sich als nützlich erweisen. Folgendes kleines Beispielprogramm zeigt, wie man Werte aus einem Filestream in einen Vector kopiert. Die Komplexität wird in der Funktion copy gekapselt - es wird kein manueller Gebrauch von Zeigerarithmetik benötigt.


C++:
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;

int main()
{
        vector<char> v;

        ifstream is("d.dat");
        is.unsetf(ios_base::skipws);

        istream_iterator<char> ii(is);
        istream_iterator<char> eos;

        copy(ii, eos, back_inserter(v));

        copy(v.begin(), v.end(), ostream_iterator<char>(cout));
}



Grüße
Martin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.12.2006, 11:20 Uhr
Drager



@MartinF

danke werd ich mir auch mal genauer anschauen.


ansonsten hab ich nun doch eine offizielle quelle gefunden:

www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#69
 
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: