Narzędzia użytkownika

Narzędzia witryny


remove_remove_if

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision
Previous revision
remove_remove_if [2009/04/28 20:26]
piotrek
remove_remove_if [2009/04/29 11:37] (aktualna)
piotrek
Linia 1: Linia 1:
 ====== Algorytmy remove remove_if ====== ====== Algorytmy remove remove_if ======
  
-**remove()** – usuwa z określonego zakresu elementy równe podanej wartości. Zwraca iterator do ostatniego z pozostałych elementów.+**remove** – usuwa z określonego zakresu elementy równe podanej wartości. ​
  
-**remove_if()** – usuwa z określonego zakresu elementy, dla których dany predykat jest prawdziwy. Zwraca iterator do ostatniego z pozostałych elementów.+**remove_if** – usuwa z określonego zakresu elementy, dla których dany predykat jest prawdziwy. ​
  
 ===== Nagłówek dla algorytmów remove i remove_if ===== ===== Nagłówek dla algorytmów remove i remove_if =====
Linia 35: Linia 35:
 Algorytm zwraca iterator wskazujący pierwszy element za końcem przedziału zawierającego wszystkie „nieusunięte” elementy. ​ Ta wartość jest „nowym logicznym końcem zakresu”. Algorytm zwraca iterator wskazujący pierwszy element za końcem przedziału zawierającego wszystkie „nieusunięte” elementy. ​ Ta wartość jest „nowym logicznym końcem zakresu”.
  
 +{{:​remove.jpg|}}
 === Przykład użycia algorytmu remove === === Przykład użycia algorytmu remove ===
 <code cpp> ​ <code cpp> ​
Linia 68: Linia 69:
  }  }
  //Nowy logiczny koniec bedzie wskazywal wartosc 8  //Nowy logiczny koniec bedzie wskazywal wartosc 8
- cout << "\nJaka pozycje ​wskazuje ​nowy logiczny koniec ​:" << ​ *NewEnd<<​ endl;+ cout << "\nNa jaki element ​wskazuje ​NewEnd ​:" << ​ *NewEnd<<​ endl;
  return 0;  return 0;
 } }
Linia 84: Linia 85:
   }   }
  
 +</​code>​
 +
 +=== Parametry algorytmu remove_if ===
 +  * first - iterator identyfikujący początek zakresu elementów.
 +  * last - interator identyfikujący koniec zakresu elementów.
 +  * pred - predykat do spełnienia.
 +
 +===Wartość zwracana algorytmu remove ==
 +Iterator do pierwszego elementu za końcem przedziału zawierającego wszystkie "​nieusunięte"​ elementy.
 +
 +=== Jak algorytm NIE działa ? === 
 +Algorytm remove_if tak jak algorytm remove niczego fizycznie nie usuwa, dlatego liczebność elementów zawartych w kontenerze nigdy się nie zmienia.
 +=== Działanie algorytmu ===
 +Algorytm remove_if podobnie jak algorytm remove tak naprawdę dokonuje przemieszczenia elementów w zadanym mu przy wywołaniu zakresie. Logicznie są usuwane elementy tylko te dla których został spełniony określony predykat.
 +=== Przykład użycia algorytmu remove_if ===
 +<code cpp>
 +//Dla algorytmu remove_if zostana usuniete elementy
 +//ktore sa mniejsze od 5 (w naszym przypadku 1,2,3,4)
 +bool lower5(int x){
 + return x < 5;
 +}
 +int main(){
 + vector<​int>​ v;
 +
 + v.reserve(10);​
 + for (int i=1; i<= 10; ++i){
 + v.push_back(i);​
 + }
 +
 + //zostanie wypisana wartosc 10 
 + cout << "Ilosc elementow zawartych w kontenerze " << v.size() << endl;
 +
 + //na ekranie zotanie wyswietlone 1,​2,​3,​4,​5,​6,​7,​8,​9,​10
 + cout << "Przed uzyciem algorytmu remove_if : ";
 + for(int i=0; i<=9; ++i){
 + cout << v[i] << ",";​
 + }
 +
 + //usuniete zostana elementy ktorych wartosc jest mniejsza od 5 tzn. 1,2,3,4
 + vector< int >::​iterator NewEnd(remove_if(v.begin(),​v.end(),​lower5));​
 +
 + //po usunieciu liczebnosc elementow zawartych w kontenerze pozostaje TAKA SAMA tzn. 10
 + cout << "​\nIlosc elementow zawartych w kontenerze ​ " << v.size() << endl;
 + cout << "Po uzyciu algorytmu remove_if : ";
 +
 + // na ekranie zostanie wyswietlone 5,​6,​7,​8,​9,​10,​7,​8,​9,​10
 + for(int i=0; i<=9; ++i){
 + cout << v[i] << ",";​
 + }
 + //Nowy logiczny koniec bedzie wskazywal wartosc 7
 + cout << "​\nJaki element wskazuje NewEnd :" << ​ *NewEnd<<​ endl;
 +
 + return 0;
 +}
 </​code>​ </​code>​
remove_remove_if.1240943218.txt.gz · ostatnio zmienione: 2009/04/28 20:26 przez piotrek