CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - std::vector zamiana elementów miejscami

std::vector zamiana elementów miejscami

dział ogólny

std::vector zamiana elementów miejscami

Nowy postprzez Corvis » wtorek, 20 listopada 2012, 22:41

Witam,

Mam w wektorze obiekt TWykres nie ważne co ma w środku. Sytuacja w wektorze wygląda następująco:

Index | Nazwa wykresu

0 Wykres A
1 Wykres B
2 Wykres C
3 Wykres D
4 Wykres E
5 Wykres F

Wykresy wizualizuję w TStringGrid. Dałem użytkownikom możliwość zamiany wykresów miejscami.

Przykład 1 - Przestawienie wykresy F na pozycję wykresu B
Wynik jaki chcę otrzymać:

0 Wykres A
1 Wykres F
2 Wykres B
3 Wykres C
4 Wykres D
5 Wykres E

Przykład 2- Przestawienie wykresu B na pozycję wykresu E
Wynik jaki chcę otrzymać:

0 Wykres A
1 Wykres C
2 Wykres D
3 Wykres E
4 Wykres B
5 Wykres F

Szukam jakiejś funkcji stl która przestawi mi element wektora w nowe miejsce. Próbowałem to zrobić przy użyciu funkcji rotate ale mi nie wychodzi tak jak chcę. Pytanie może głupie ale naprawdę nie wiem jak to ogarnąć.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: std::vector zamiana elementów miejscami

Nowy postprzez Mironas » środa, 21 listopada 2012, 11:31

Zapamiętaj dane wykresu w oddzielnym obiekcie TWykres, a potem na wektorze wykonaj:
erase(...)
insert(...)
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: std::vector zamiana elementów miejscami

Nowy postprzez Corvis » środa, 21 listopada 2012, 11:47

No ale to trzeba kopiować dane z jednego wektora do drugiego i ustawiać je na odpowiednich pozycjach. Może jest jakaś funkcja STL która to zrobi.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: std::vector zamiana elementów miejscami

Nowy postprzez Mironas » środa, 21 listopada 2012, 12:14

Corvis napisał(a):No ale to trzeba kopiować dane z jednego wektora do drugiego...

Jakiego drugiego wektora?

Wszystkie dane masz w wektorze - nazwijmy go WW (Wektor Wykresów) - gdzie każdy element jest typu TWykres.
1. Tworzysz dodatkowy tymczasowy obiekt TWykres (nazwijmy go OTemp) na podstawie danych elementu który chcesz przesunąć.
2. Usuwasz z wektora element który jest do przesunięcia: WW.erase(idx1);
3. Dodajesz do wektora obiekt OTemp na pozycji docelowej: WW.insert(idx2, OTemp);
idx1 - pierwotny indeks przesuwanego elementu
idx2 - indeks docelowy.

Piszę z pamięci więc w 'kodzie' mogą być błędy - ale idea powinna być słuszna ;)

Za ten post autor Mironas otrzymał podziękowanie od:
Corvis
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: std::vector zamiana elementów miejscami

Nowy postprzez Corvis » środa, 21 listopada 2012, 12:50

:oops:

Masakra, jak ja wczoraj czytając dokumentację pominąłem insert ... Dzięki
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: std::vector zamiana elementów miejscami

Nowy postprzez Cyfrowy Baron » środa, 21 listopada 2012, 20:37

Przecież niczego nie musisz kasować ani wstawiać! Od czago masz metodę at?

KOD cpp:     UKRYJ  
vector<String> vText;

/*wypełnianie vector'a */

String txt1 = vText[5];
String txt2 = vText[7];

vText.at(5) = txt2;
vText.at(7) = txt1;
Można też stworzyć sobie dla ułatwienia funkcję, która będzie zamieniała elementy miejscami:

KOD cpp:     UKRYJ  
void swop( int id1, int id2, vector<String> &vTy)
{
 String vTemp1 = vTy[id1], vTemp2 = vTy[id2];

 vTy.at(id1) = vTemp2;
 vTy.at(id2) = vTemp1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
 swop( 5, 7, vText );
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: std::vector zamiana elementów miejscami

Nowy postprzez Mironas » czwartek, 22 listopada 2012, 08:44

Cyfrowy Baron napisał(a):Od czago masz metodę at


Ale Corvis chciał przesunąć pojedynczy element na inną pozycję, a nie zamienić dwie pozycje miejscami.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: std::vector zamiana elementów miejscami

Nowy postprzez Cyfrowy Baron » czwartek, 22 listopada 2012, 10:15

Fakt! Umknęło mi to... :?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 19 gości

cron