Array vs Vector vs ...



  • Über diese Variante habe ich auch schon nachgedacht:
    std::vector<structname> VectorName

    Aber das ganze muss gut organisiert sein.
    Ist es möglich einen Vector anzulegen, über den ich einen weiteren Vector ansprechen kann, in dem dann die Daten liegen?

    also z.B.

    db1[0].stockdata[0]

    in db1 liegen alle Vectorern und in stockdata die Kursdaten.



  • std::vector< std::vector<structname> > VectorName;

    oder

    std::vector<structname> VectorName[110];

    Zugriff dann:
    VectorName[i][j]=struct;

    Geht beides.

    Noch was. Fall Dir voher bekannt ist wie groß der Verktor wird kannst Du ihn mit resize auf die geplante Größe setzen.
    Dann wird er nicht 10000 mal verlängert.

    Babbage



  • Klasse, werde ich heute Abend testen. Vielen Dank!!!



  • std::vector< std::vector<data> > data1_db;

    führt zu:

    --------------------Konfiguration: Sherlock - Win32 Debug--------------------
    Kompilierung läuft...
    communication.cpp
    c:\programme\microsoft visual studio\vc98\include\utility(21) : warning C4786: 'std::reverse_iterator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > const *,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std
    ::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > const &,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > const *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
    c:\programme\microsoft visual studio\vc98\include\utility(21) : warning C4786: 'std::reverse_iterator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > *,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::vect
    or<CSherlockDlg::data,std::allocatorCSherlockDlg::data > &,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
    Generieren von Code...
    Kompilieren...
    Sherlock.cpp
    c:\programme\microsoft visual studio\vc98\include\vector(60) : warning C4786: 'std::reverse_iterator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > const *,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std:
    :vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > const &,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > const *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
    c:\programme\microsoft visual studio\vc98\include\vector(58) : Bei der Kompilierung der Member-Funktion '__thiscall std::vector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data
    ,std::allocatorCSherlockDlg::data > > >::~std::vector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > > >(void)' der Klassenvorlage
    c:\programme\microsoft visual studio\vc98\include\vector(60) : warning C4786: 'std::reverse_iterator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > *,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::vecto
    r<CSherlockDlg::data,std::allocatorCSherlockDlg::data > &,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
    c:\programme\microsoft visual studio\vc98\include\vector(58) : Bei der Kompilierung der Member-Funktion '__thiscall std::vector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data
    ,std::allocatorCSherlockDlg::data > > >::~std::vector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > > >(void)' der Klassenvorlage
    SherlockDlg.cpp
    c:\programme\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::reverse_iterator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > const *,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std:
    :vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > const &,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > const *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
    c:\programme\microsoft visual studio\vc98\include\vector(39) : Bei der Kompilierung der Member-Funktion '__thiscall std::vector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data
    ,std::allocatorCSherlockDlg::data > > >::std::vector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > > >(const std::allocator<std::vector<CSherl
    ockDlg::data,std::allocatorCSherlockDlg::data > > &)' der Klassenvorlage
    c:\programme\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::reverse_iterator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > *,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::vecto
    r<CSherlockDlg::data,std::allocatorCSherlockDlg::data > &,std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
    c:\programme\microsoft visual studio\vc98\include\vector(39) : Bei der Kompilierung der Member-Funktion '__thiscall std::vector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data
    ,std::allocatorCSherlockDlg::data > > >::std::vector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > > >(const std::allocator<std::vector<CSherl
    ockDlg::data,std::allocatorCSherlockDlg::data > > &)' der Klassenvorlage
    Generieren von Code...
    c:\programme\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::vector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > > >::ve
    ctor<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > > >' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen verkürzt
    c:\programme\microsoft visual studio\vc98\include\vector(60) : warning C4786: 'std::vector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > > >::~v
    ector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > > >' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen verkürzt
    c:\programme\microsoft visual studio\vc98\include\vector(60) : warning C4786: 'std::vector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > > >::~v
    ector<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data >,std::allocator<std::vector<CSherlockDlg::data,std::allocatorCSherlockDlg::data > > >' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen verkürzt
    Linker-Vorgang läuft...

    Sherlock.exe - 0 Fehler, 9 Warnung(en)

    --

    Kann mir das jemand erklären bzw. sagen, wie ich die Warnung wegbekomme?



  • Die Warnungen kann man nur per

    #pragma warning(disable:4786)

    ignorieren.



  • Aber warum taucht die Warnung auf?



  • Und warum werden in einer MFC-Anwendung nicht die Rutinen und Operatoren des Vectors angezeigt, wenn man diesen global definiert hat?

    ich meine:

    vector1[0].push_back ... Nachdem man den . (Punkt) drückt, erscheint doch sonst ein Kästchen, wo alle Rutinen etc. drinstehen.

    Grüße,
    Michael



  • IntelliSense funktioniert nicht zuverlässig. Wenn du das zuverlässig haben willst musst du dir Visual Assist X kaufen.



  • Kay, thx



  • Zu beiden Fragen (doofe Warnung und IntelliSense Versagen): weil du immer noch Visual C++ 6 verwendest.

    Die Warnung kannst du im übrigen getrost ignorieren, die besagt nur dass der Name in der Debug-Info "beschnitten" werden, weil VC 6 zu doof ist lange Namen in der Debug-Info zu speichern. Keine Ahnung wieso - vielleicht haben sich die auch nur gedacht "255 Zeichen reicht eh locker"...

    Und das #pragma warning(disable:4786) sollte am besten ganz am Anfang des Programmes stehen, also falls du Precompiled-Headers verwendest auch ganz oben in der "stdafx.h". Sonst funktioniert es nämlich nicht. Frag mich aber bloss nicht wieso...



  • #pragma warning( disable : 4786 )



  • hustbaer schrieb:

    Und das #pragma warning(disable:4786) sollte am besten ganz am Anfang des Programmes stehen, also falls du Precompiled-Headers verwendest auch ganz oben in der "stdafx.h". Sonst funktioniert es nämlich nicht. Frag mich aber bloss nicht wieso...

    Der Präprozessor arbeitet zeilenorientiert, deshalb schaltet dieses #pragma die Warnungen von dem Punkt an aus, an dem es steht (bis zum Ende der Datei oder bis zum zugehörigen #pragma warning(default:4786) ). In Headern, die du vorher schon eingebunden hattest, kommt die Warnung trotzdem vor.

    Zum Sinn DIESER Warnung: Der Debugger von VC kann keine unbegrenzt langen Bezeichner lesen, deshalb werden diese entsprechend abgeschnitten (zusammen mit einem Hinweis für den Programmierer). Und gerade in der STL kann da einiges zusammenkommen, wenn die typedefs und Default-Parameter für die STL-Klassen aufgelöst werden.


Anmelden zum Antworten