C++/List/list erase
Demonstrating the STL list erase function
#include <iostream>
#include <cassert>
#include <list>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string s("remembering");
list<char> list1(s.begin(), s.end());
list<char>::iterator j;
j = find(list1.begin(), list1.end(), "i");
list1.erase(j++);
list<char>::iterator i;
for (i = list1.begin(); i != list1.end(); ++i)
cout << *i << " ";
list1.erase(j++);
for (i = list1.begin(); i != list1.end(); ++i)
cout << *i << " ";
list1.erase(j++);
for (i = list1.begin(); i != list1.end(); ++i)
cout << *i << " ";
list1.erase(list1.begin());
for (i = list1.begin(); i != list1.end(); ++i)
cout << *i << " ";
list1.erase(list1.begin());
for (i = list1.begin(); i != list1.end(); ++i)
cout << *i << " ";
return 0;
}
/*
r e m e m b e r n g
r e m e m b e r g
r e m e m b e r
e m e m b e r
m e m b e r
*/
keep only the top 3 salespeople
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
class Employee
{
public:
Employee( const string& name = "", int sales = 0,int district = 0 );
bool operator>( const Employee& rhs ) const;
void print() const;
private:
int district_;
string name_;
int sales_;
};
inline
Employee::Employee( const string& name, int sales,
int district )
: district_( district ), name_( name ), sales_( sales )
{}
inline
bool Employee::operator>( const Employee& rhs ) const
{ return sales_ > rhs.sales_; }
inline
void Employee::print() const
{ cout << name_ << " from District " << district_
<< " has sales of $" << sales_ << endl;
}
int main( )
{
list<Employee> list1;
list1.push_back( Employee( "A", 3, 1 ) );
list1.push_back( Employee( "B", 4, 1 ) );
list1.push_back( Employee( "C", 8, 1 ) );
list1.sort( greater<Employee>() );
for_each( list1.begin(), list1.end(), mem_fun_ref( &Employee::print ) );
const int top_positions = 3;
list<Employee>::iterator position = list1.begin();
advance( position, top_positions );
list1.erase( position, list1.end() );
for_each( list1.begin(), list1.end(),mem_fun_ref( &Employee::print ) );
}