Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » std::vector< std::vector<std::wstring> > push_back

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 < [ 2 ]
000
09.03.2007, 23:15 Uhr
xXx
Devil


bin irgendwie zu dumm da richtig ein neues element mit push_back einzufügen ...
kann mir jemand auf die Sprünge helfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.03.2007, 23:49 Uhr
xXx
Devil


hmm war eigentlich ganz einfach :/

C++:
m_items.push_back(std::vector<std::wstring>(m_columns.size()));
m_items[m_items.size() - 1][0] = item;
...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.03.2007, 15:06 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Hmm, sollte man operator[] nicht eigentlich eher vermeiden?
Zumindest beim Lesen kann der Compiler das so ja nicht inlinen ...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.03.2007, 10:15 Uhr
Th



Ich würde es auch anders coden, nämlich erst den ersten vector erzeugen und dann dem übergeordenten vector hinzufügen:


C++:
std::vector<std::wstring> vColumns(m_columns.size());
vColumns[0] = item;

m_items.push_back(vColumns);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.03.2007, 13:03 Uhr
xXx
Devil


hab ich erst gemacht ... hat er mir aber, aus mir unerkennbaren Gründen, dann um die Ohren geworfen ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.03.2007, 13:39 Uhr
xXx
Devil


kann mir denn mal einer sagen warum folgendes nicht funktioniert?

C++:
Window* Manager::get_window(const unsigned short& id)
{
    if (id >= m_windows.size())
        return NULL;
        
    return (*(m_windows.begin() + id));
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.03.2007, 13:58 Uhr
xXx
Devil


achja ... der haut übrigens bei size() raus ... der this pointer scheint da nicht in ordnung zu sein ... ka warum jemand ne idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.03.2007, 14:28 Uhr
RHBaum



glaub fuer den iterator ist kein operator + (unsigned int ) definiert. Also iteration nur in einzelschritten.

Mehrfachschritte sollten auch nur bei vectoren functionieren, und fuer nen quasi indizierten zugriff brauchst wiederum keine iteratoren ....

besser also, wenn es sich um nen vector handelt:


C++:
Window* Manager::get_window(const unsigned int& id)
{
    return  id <  m_windows.size() ? m_windows[id] : NULL;
}



short solltest nur nehmen, wenn der platz wirklich knapp ist, bzw du structuren befuellst wo du mit anderen membern auf kleinen speicherverbrauch kommen willst.
short verringert zwar den verbrauch im speicher, erzweugt aber unnötige rechenlast wenn du damit arbeitest (32 bit systeme sind aufs arbeiten mit 32bit integers optimiert.)

sicher das er dich beim size() raushaut ? wuerde bedeuten das dein container m_windows(wie ist der angelegt ?) eigentlich zersteort ist, was ich mir ned vorstellen kann ....

Ciao ...

Dieser Post wurde am 12.03.2007 um 14:29 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.03.2007, 16:00 Uhr
RHBaum



Hab noch mal nachgeschaut, Random Access Iteratoren koennen die Mehrfachschritte, der typ der addiert / subtrahiert wird, sollte allerdings vom typ iterator<>::difference_type sein.

und funktioniert nur bei containern die Random access iteratoren liefern, also vector / dequeue

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.03.2007, 20:49 Uhr
xXx
Devil


hmm also hab mir nochmal genauer angeguckt wie es so aussieht ... also ... wenn der in die get_window Punktion reinkommt, meint der debugger das m_windows fehlerhaft ist.


Code:
-    m_windows    {first=??? last=???}    std::vector<gui::Window *,std::allocator<gui::Window *> >
+    std::_Vector_val<gui::Window *,std::allocator<gui::Window *> >    {_Alval={...} }    std::_Vector_val<gui::Window *,std::allocator<gui::Window *> >
+    _Myfirst    CXX0030: Error: expression cannot be evaluated    gui::Window * *
+    _Mylast    CXX0030: Error: expression cannot be evaluated    gui::Window * *
+    _Myend    CXX0030: Error: expression cannot be evaluated    gui::Window * *
...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: