#include <list>
#include <iostream>
#include <string>

using namespace std;

template <class T>
void display_list( list<T> vec )
{
    cout << "display_list: ";
    for( typename list<T>::iterator p = vec.begin(); p != vec.end(); p++ )
        cout << *p << ", ";
    cout << endl;
}

int main()
{
    list<int> nums;
    
    // insert 1 ... 10 into nums
    for( int i=1; i<11; i++ )
        nums.push_back(i);
    
     nums.push_front(0);
     
     cout << "First number= " << nums.front() << endl;
     cout << "Last number= " << nums.back() << endl;
     
     nums.reverse();
     display_list( nums );
     
     nums.sort();
     display_list( nums );
     
     int sum=0;
     for( auto x = nums.begin(); x != nums.end(); x++ )
     sum += *x;
     cout << "Total sum = " << sum << endl;
     
     nums.pop_back();
     display_list(nums);
     
     nums.pop_front();
     display_list(nums);
     
     nums.clear();
     display_list(nums);
     
     if(nums.empty() )
     cout << "Empty" << endl;
     else
     cout << "Not empty" << endl;
     
    system("pause");
}