Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » std::vector element verschieben

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
21.05.2007, 14:59 Uhr
xXx
Devil


Also ... hab einen std::vector<Window*> ... jetzt will ich das ein bestimmtes Item an den Anfang des Arrays verschoben wird, und die anderen Elemente dementsprechenden dann verschoben werden. Ich könnte zwar hingehen und mit std::rotate einfach den ganzen Array rotieren, sodass mein Element am Anfang steht. Aber da gibts auch Probleme ... weils nicht das macht wie ichs gern hätte:

Code:
Element1
Element2
Element3
Element4
Element5
Element6
Element7
Element8

Jetzt sagen wir mal will ich "Element3" haben ..

Code:
Element3
Element1
Element2
Element4
Element5
Element6
Element7
Element8
... usw. Gibt es da was fertiges oder muss man es selbst schreiben?

Vg Deviloper
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.05.2007, 15:11 Uhr
0xdeadbeef
Gott
(Operator)



C++:
std::swap(v[0], v[2]);


...wobei v der Vektor ist.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.05.2007, 15:17 Uhr
xXx
Devil


hmm werten durch swap nicht nur die beiden Werte vertauscht? Das wäre nämlich nicht das was ich will. Ich will das das Element x nach vorne kommt und die restlichen Elemente entsprechend aufrücken ... also

Code:
Element1
Element2
Element3
Element4
Element5
Element6
Element7
Element8
"Element3" ziehen ...

Code:
Element3
Element1
Element2
Element4
Element5
Element6
Element7
Element8
... noch ein Element ziehen

Code:
Element7
Element3
Element1
Element2
Element4
Element5
Element6
Element8

Dieser Post wurde am 21.05.2007 um 15:18 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.05.2007, 15:23 Uhr
0xdeadbeef
Gott
(Operator)


Ach soooo. Ne, da musste dir selbst was für ausdenken. Ich denke da an sowas wie

C++:
  Window *tmp = v[2];
  v.erase(v.begin() + 2);
  v.insert(v.begin(), tmp);



Würde sich dafür eigentlich nicht eher ne Liste anbieten?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 21.05.2007 um 15:27 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.05.2007, 15:30 Uhr
xXx
Devil


hmm doch könnte ich eigentlich auch nehmen ... hmm warum nicht ... aber so wie dein Beispiel da sollte ja eigentlich auch gehen Werde mal sehen ob ich jetzt nochmal alles auf std::list umschmeiße ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.05.2007, 15:32 Uhr
0xdeadbeef
Gott
(Operator)


Naja - wenn du viele solche Operationen machst, die sind halt mit std::vector rechenaufwändig. Es kommt ein bisschen drauf an, was du sonst noch machst - wenn du random access brauchst, kann der Vektor trotzdem sinnvoller sein, aber ich halte das eigentlich für unwahrscheinlich im Zusammenhang mit Fenstern.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.05.2007, 15:40 Uhr
mike
Pinguinhüpfer
(Operator)


Würde auch zu list tendieren. Sowas in die Richtung - obwohl solche iterator Spielchen oft coole Nebenwirkungen haben

C++:
#include <iostream>
#include <list>

void print(const int i)
{
  std::cout << i << std::endl;
}

int main()
{
  std::list<int> foo;
  std::list<int>::iterator it;

  for(unsigned i=0; i < 10; i++)
    foo.push_back(i);

  std::for_each(foo.begin(), foo.end(), print);

  it = foo.begin();
  std::advance(it, 3);
  foo.splice(foo.begin(), foo, it);

  std::cout << "after" << std::endl;

  std::for_each(foo.begin(), foo.end(), print);

  return 0;
}


--
 
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: