1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | /* 제너릭 remove 알고리즘은 주어진 구간 내에서 특정 값과 일치하는 원소들을 모두 삭제한 다. ** 유의할 점은 remove 알고리즘은 수행한 후에도 컨테이너의 사이즈는 변하지 않는 다는 것이다. remove 알고리즘은 주어진값과 일치하지 않는 원소들을 인자로 주어진 구간의 앞쪽에 몰아넣고, 이 원소들이 끝나는 위치에 해당하는 반복자를 리턴 값으로 리턴한다. 이 알고리즘은 "stable" 알고리즘에 해당하며, 알고리즘을 수행한 후에 시퀀스에서 삭제 되지 않은 원소들의 상대적인 순서는 그대로 유지된다.. */ #include <iostream> #include <cassert> #include <algorithm> #include <vector> using namespace std; int main() { cout<< "Illustrating the generic remove algorithm." << endl; const int N = 11; int array1[N] = {1, 2, 0, 3, 4, 0, 5, 6, 7, 0, 8}; vector< int > vector1; int i; for (i=0; i< N; ++i) vector1.push_back(array1[i]); // vector1에서 0을 제거한다. vector< int >::iterator new_end; new_end = remove (vector1.begin(), vector1.end(), 0); // 원소들을 삭제한 뒤에도 vector1의 사이즈는 변하지 않는다. assert (vector1.size() == N); // 0이 아닌 원소들은 [vector1.begin(), new_end) 에 남아 있다. // 뒷부분에 위치한, 나머지 원소들을 완전히 삭제한다. vector1.erase(new_end, vector1.end()); // 세 개의 원소가 삭제되고, 0이 아닌 원소들은 원래의 순서를 // 그대로 유지한 채 남아있다는 것을 보여 준다. assert (vector1.size() == N-3); for (i=0; i< ( int )vector1.size(); ++i) assert (vector1[i] = i+1); cout<< " --- Ok." << endl; return 0; } |
'STL > 변경 가능 시퀀스 알고리즘' 카테고리의 다른 글
[STL] reverse (0) | 2010.05.17 |
---|---|
[STL] replace (0) | 2010.05.17 |
[STL] random_shuffle (0) | 2010.05.17 |
[STL] partition (0) | 2010.05.17 |
[STL] generate (0) | 2010.05.17 |