#include #include #include #include struct entry_t { int i; int j; int coef; }; struct EntryFunctor { int i, j; EntryFunctor(int i, int j):i(i), j(j){} bool operator()(entry_t const &e) const { printf("Test entry (%d,%d,%d) with (%d,%d,xxxx) : ", e.i, e.j, e.coef, i, j); if( e.i == i && e.j == j) { printf("erased \n"); return true; } else { printf("no erased \n"); return false; } } }; std::list LIS; void InitListe() { LIS.push_back( {7,8,9} ); LIS.push_front( {1,2,3} ); LIS.insert(++LIS.begin(), {4,5,6} ); LIS.push_front( {7,8,9} ); LIS.push_back( {10,11,12} ); LIS.push_front( {1,2,3} ); LIS.push_back( {13,14,15} ); LIS.insert(--LIS.end(), {4,5,6} ); LIS.push_back( {4,5,6} ); LIS.push_front( {4,5,6} ); LIS.push_back( {7,8,9} ); LIS.push_front( {1,2,3} ); LIS.push_back( {7,8,9} ); } void PrintListe() { std::list::iterator iter; printf("\nPrintLIS() : \n"); for( iter = LIS.begin() ; iter != LIS.end() ; ++iter) { printf("%d %d %d \n", iter->i, iter->j, iter->coef); } printf("\n"); } void DestroyFirstEntries(int i, int j, int nitems) { std::list::iterator iter = LIS.begin(); int deleted = 0; printf("Destroy first %d entries (%d,%d,xxxx)\n", nitems, i, j); while (iter != LIS.end()) { printf(" Test entry %d (%d,%d,%d) with (%d,%d,xxxx): ", nitems, iter->i, iter->j, iter->coef, i, j ); if( (iter->i == i) && (iter->j == j) ) { iter = LIS.erase(iter); printf("erased \n"); if( ++deleted == nitems) return; } else { ++iter; printf("no erased \n"); } } } void DestroyFirstEntry(int i, int j) { DestroyFirstEntries(i,j,1); } void DestroyEntries(int i, int j, int nentries=1000) { DestroyFirstEntries(i,j, nentries); } void DestroyAllsEntries(int i, int j) { printf("Destroy all entries (%d,%d,xxxx)\n", i, j); //LIS.erase(std::remove_if(LIS.begin(),LIS.end(),EntryFunctor(i,j)),LIS.end()); std::remove_if(LIS.begin(),LIS.end(),EntryFunctor(i,j)); } int main(int argc, char **argv) { InitListe(); PrintListe(); DestroyFirstEntry(4,5); PrintListe(); DestroyFirstEntries(4,5, 2); PrintListe(); DestroyEntries(7,8); PrintListe(); DestroyAllsEntries(1,2); PrintListe(); return(0); }