Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision | Next revision Both sides next revision | ||
unique_unique_copy [2009/04/30 00:48] pgrabowska uzupelnienie |
unique_unique_copy [2009/04/30 01:45] pgrabowska dodanie przykładów |
||
---|---|---|---|
Linia 51: | Linia 51: | ||
Należy uwzględnić fakt, że algorytm **unique** nie zmienia wielkości kontenera, ani nie zmienia elementów położonych za nowym końcem ( ciągle są dostępne ). | Należy uwzględnić fakt, że algorytm **unique** nie zmienia wielkości kontenera, ani nie zmienia elementów położonych za nowym końcem ( ciągle są dostępne ). | ||
+ | |||
+ | ==== Przykład ==== | ||
+ | |||
+ | <code cpp> | ||
+ | #include <iostream> | ||
+ | #include <algorithm> | ||
+ | #include <vector> | ||
+ | using namespace std; | ||
+ | |||
+ | // implementacja funkcji porownujacej elementy | ||
+ | bool comp(int i, int j) | ||
+ | { | ||
+ | return (i==j); | ||
+ | } | ||
+ | |||
+ | int main () | ||
+ | { | ||
+ | // tworzy wektory z powtarzajacymi sie po sobie elementami | ||
+ | int myints[] = {10,20,20,20,30,30,20,20,10}; | ||
+ | vector<int> myvector (myints,myints+9); // 10 20 20 20 30 30 20 20 10 | ||
+ | vector<int>::iterator it; | ||
+ | |||
+ | // PRZYKLAD UZYCIA UNIQUE Z DOMYSLNYM OPERATOREM == | ||
+ | |||
+ | // użycie unique z domyslnym operatorem == | ||
+ | it = unique (myvector.begin(), myvector.end()); // 10 20 30 20 10 30 20 20 10 | ||
+ | |||
+ | // dostosowanie wielkosci myvector do zaktualizowanej liczby elementow | ||
+ | myvector.resize( it - myvector.begin() ); // 10 20 30 20 10 | ||
+ | |||
+ | // wypisanie zawartosci myvector | ||
+ | // 10 20 30 20 10 | ||
+ | cout << "\nunique z domyslnym operatorem==\n"; | ||
+ | for (vector<int>::iterator iter=myvector.begin(); iter!=myvector.end(); ++iter) | ||
+ | cout << " " << *iter; | ||
+ | |||
+ | |||
+ | // PRZYKLAD UZYCIA UNIQUE ZE ZDEFINIOWANA FUNKCJA POROWNUJACA ELEMENTY | ||
+ | myvector.clear(); | ||
+ | myvector.insert(myvector.begin(), myints, myints + 9); // 10 20 20 20 30 30 20 20 10 | ||
+ | |||
+ | // uzycie unique ze zdediniowana funkcja porownujaca elementy | ||
+ | it = unique (myvector.begin(), myvector.end(), comp); // 10 20 30 20 10 30 20 20 10 | ||
+ | |||
+ | // dostosowanie wielkosci myvector do zaktualizowanej liczby elementow | ||
+ | myvector.resize( it - myvector.begin() ); // 10 20 30 20 10 | ||
+ | |||
+ | // wypisanie zawartosci myvector | ||
+ | // 10 20 30 20 10 | ||
+ | cout << "\n\nunique ze zdefiniowana funkcja porownujaca\n"; | ||
+ | for (vector<int>::iterator iter=myvector.begin(); iter!=myvector.end(); ++iter) | ||
+ | cout << " " << *iter; | ||
+ | |||
+ | cout << endl; | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | |||
===== unique_copy ===== | ===== unique_copy ===== | ||
Linia 93: | Linia 153: | ||
Iterator wskazujący na koniec skopiowanego zakresu. | Iterator wskazujący na koniec skopiowanego zakresu. | ||
+ | ==== Przykład ==== | ||
+ | |||
+ | <code cpp> | ||
+ | #include <iostream> | ||
+ | #include <algorithm> | ||
+ | #include <vector> | ||
+ | using namespace std; | ||
+ | |||
+ | // implementacja funkcji porownujacej elementy | ||
+ | bool comp(int i, int j) | ||
+ | { | ||
+ | return (i==j); | ||
+ | } | ||
+ | |||
+ | int main () | ||
+ | { | ||
+ | // tworzy wektory z powtarzajacymi sie po sobie elementami | ||
+ | int myints[] = {10,20,20,20,30,30,20,20,10}; | ||
+ | vector<int> myvector (9); // 0 0 0 0 0 0 0 0 0 | ||
+ | vector<int>::iterator it; | ||
+ | |||
+ | |||
+ | // użycie unique_copy z domyslnym operatorem == | ||
+ | it=unique_copy (myints,myints+9,myvector.begin()); // 10 20 30 20 10 0 0 0 0 | ||
+ | |||
+ | // sortowanie elementow | ||
+ | sort (myvector.begin(),it); // 10 10 20 20 30 0 0 0 0 | ||
+ | |||
+ | // uzycie unique_copy ze zdediniowana funkcja porownujaca elementy | ||
+ | it=unique_copy (myvector.begin(), it, myvector.begin(), comp); // 10 20 30 20 30 0 0 0 0 | ||
+ | |||
+ | // dostosowanie wielkosci myvector1 do zaktualizowanej liczby elementow | ||
+ | myvector.resize( it - myvector.begin() ); // 10 20 30 | ||
+ | |||
+ | // wypisanie zawartosci | ||
+ | // 10 20 30 | ||
+ | for (vector<int>::iterator iter=myvector.begin(); iter!=myvector.end(); ++iter) | ||
+ | cout << " " << *iter; | ||
+ | |||
+ | cout << endl; | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </code> | ||