Mega Code Archive

 
Categories / C++ / Algorithm
 

Use the generic remove algorithm

#include <iostream> #include <cassert> #include <algorithm> #include <vector> using namespace std; int main() {   const int  N = 11;   int array1[N] = {1, 2, 0, 3, 4, 0, 5, 6, 7, 0, 8};   vector<int> vector1;   for (int i = 0; i < N; ++i)     vector1.push_back(array1[i]);   // Remove the zeros from vector1:   vector<int>::iterator new_end;   new_end = remove(vector1.begin(), vector1.end(), 0);   for (int i = 0; i < (int)vector1.size(); ++i)     cout << vector1[i];   cout << "\n\n\n\n\n";   // The size of vector1 remains the same:   assert (vector1.size() == N);   cout << vector1.size();   cout << "\n\n\n\n\n";   // The nonzero elements are left in [vector1.begin(), new_end).  Erase the rest:   vector1.erase(new_end, vector1.end());   // Show that 3 elements were removed and the nonzero elements remain, in their original order:   assert (vector1.size() == N - 3);   cout << vector1.size();   cout << "\n\n\n\n\n";   for (int i = 0; i < (int)vector1.size(); ++i)     cout << vector1[i];   return 0; } /*  12345678708 11 8 12345678  */